我需要在“检查”时发起一个事件。更改了几个复选框中的任何一个的状态,并且不是通过侦听单击来执行此操作。为什么呢?
看起来像这样:
BUILD YOUR SUNDAE!
All Flavors [] Chocolate [ ] Vanilla [ ] Strawberry [ ] Pistacchio [ ]
单击All Flavors时,所有其他复选框都设置为选中:
function checkAllFlavors() {
$("#flavorFilterContainer input.flavor-filter").each(function (i, elem) {
$(elem).prop('checked', true);
});
}
上述功能明显有效 - 检查所有复选框。但是,如果我像这样听取状态改变:
("#flavorFilterContainer input.flavor-filter").live('change', function () {
DispenseFlavor()
});
只有在物理上单击复选框时才会调用DispenseFlavor()方法,而不是通过将checked属性设置为true来更改复选框的已检查状态,如checkAllFlavors中所发生的那样()函数。
复选框的更改状态是仅通过GUI交互更改,而不是通过使用$(elem).prop('checked', true)
设置属性?
答案 0 :(得分:2)
您必须在change
函数中手动触发checkAllFlavors
事件:
function checkAllFlavors () {
$('#flavorFilterContainer input.flavor-filter').prop('checked', true).change();
}
顺便说一下,你应该缓存那个选择器。
答案 1 :(得分:1)
我从the jQuery forums找到了这个答案:
$.propHooks.checked = {
set: function(elem, value, name) {
var ret = (elem[ name ] = value);
$(elem).trigger("change");
return ret;
}
};
此解决方案是通过'prop'方法更改为“已检查”的自定义处理程序。此处理程序根据需要触发更改事件,但您无需手动指定它。
答案 2 :(得分:0)