我使用Jquery来选择下拉列表的值。
我需要对OnChange
事件(jQuery中的.change
)执行一些操作,但如果下拉列表中只有一个选项,我无法在onChange
事件中捕获它。
我的下拉列表是动态形成的,所以不知道我会得到多少个选项,但如果只有一个选项,我会面临问题
是否有任何方法可以用一个<option>
捕获<select>
的OnChange
事件?
您不需要有onchange事件。只要有一个从onchange调用的函数,如果只有一个项,就继续调用那个函数。
function populate() {
//do work to populate #selector
if($("#selector option").length == 1) {
$("#selector").hide();
workerFunction();
} else {
$("#selector").show();
}
$("#selector").change(workerFunction);
//the following line of code will work like a default:
workerFunction();
}
function workerFunction() {
//put whatever used to be in your onChange function here
}
onchange事件发生在元素的内部状态发生更改时。由于您有一个具有唯一值的下拉列表,因此它的状态永远不会更改,因此不会触发事件。
<label for="checkboxThatUsedToBeASelect">
<input type="checkbox" id="checkboxThatUsedToBeASelect" name="checkboxThatUsedToBeASelect" value="something" />
</label>
$('#checkboxThatUsedToBeASelect').change( function(){
});
现在,您有了一个更用户友好的输入,它将在选中或未选中时触发更改。:D
条件事件绑定器怎么样?类似于:
var changeHandler = function (method) {
alert(method);
};
if ($('select option').length > 1) {
$('select').change(function() {
changeHandler('change');
});
} else {
$('select').click(function() {
changeHandler('click');
});
}
听起来您的选项标记中有一个HTML错误。
除此之外,为了针对使用jQuery通常创建的东西,您必须使用delegator。
$('selector').change( function(e){...}); // without delegator
$('body').on('change','selector', function(e){...}); // with delegator, it detects even an element added dinamically
也就是说,您应该能够检测新旧元素的变化
。change寻找另一个囚犯来交换位置。不幸的是,在你的情况下,有一个单独的家庭案例,因此事件没有启动。