我正在开发一个Woocommerce(WordPress)项目,我的任务是在用户点击按钮时从下拉列表中获取所选值。
我的HTML是:
<select name="attribute_taxonomy" id="attribute_taxonomy" class="attribute_taxonomy">
<option value="">Custom product attribute</option>
<option value="pa_bedroom">Bedroom</option>
<option value="pa_bathroom">Bathroom</option>
</select>
<button type="button" class="button button-primary add_attribute">Add</button>
和jQuery代码是:
$('.add_attribute').on('click', function () {
var selected = $('#attribute_taxonomy option:selected');
alert(selected.val());
});
不幸的是我得到了空白警报框,没有得到任何东西。但奇怪的是,当我使用相同的HTML&amp;创建jsFiddle时jQuery代码我得到了正确的输出。
为什么我什么都没得到。有替代解决方案吗?我对jQuery并不擅长,所以如果有人指导我解决这个问题,我会感激不尽。
我的样本&gt; JSFIDDLE
感谢。
答案 0 :(得分:1)
只需使用:
var selected = $('#attribute_taxonomy');
alert( selected.val() );
答案 1 :(得分:1)
您需要获取select
元素的值,而不是其选定的option
:
$('.add_attribute').on('click', function () {
var selected = $('#attribute_taxonomy');
alert(selected.val());
});
我还倾向于阻止用户与button
进行交互,直到在select
元素中进行选择(使用disabled
(布尔)属性)和然后,一旦做出选择,阻止用户重新选择看起来像option
标签的东西(注意这比它需要的更复杂,可能会采用一种可能改进的方法)。首先,HTML:
<!-- select element unchanged -->
<button type="button" class="button button-primary add_attribute" disabled>Add</button>
jQuery的:
$('#attribute_taxonomy').on('change', function(){
// cache the $(this) jQuery object since we're potentially using it twice:
var $this = $(this);
// if there are no disabled options we run the following jQuery:
if (!$this.find('option:disabled').length) {
$this
// find the option that has no value set:
.find('option[value=""]')
// set its 'disabled' property to true (to disable it)
.prop('disabled', true)
// go back to the original selector ($(this))
.end()
// move to the next element (if it's a button element):
.next()
// unset its 'disabled' property (to enable it):
.prop('disabled',false);
}
});
$('.add_attribute').on('click', function () {
var selected = $('#attribute_taxonomy');
alert(selected.val());
});
一种稍微好一点的方法(在我看来)是正确使用HTML及其元素;使用optgroup
关联相关的option
元素,并设置label
属性来解释该组的内容:
<select name="attribute_taxonomy" id="attribute_taxonomy" class="attribute_taxonomy">
<optgroup label="Custom product attribute">
<option value="pa_bedroom">Bedroom</option>
<option value="pa_bathroom">Bathroom</option>
</optgroup>
</select>
这种方法意味着总是设置一个带有值的选项(尽管最初是默认值,除非其中一个option
被赋予selected
属性),这意味着{{1不需要设置button
属性设置/取消设置,以防止在没有值的情况下意外选择disabled
。
参考文献:
答案 2 :(得分:0)