3

当多个复选框中的任何一个的“已选中”状态发生更改时,我需要触发一个事件,并且不要通过监听 click来执行此操作。为什么?

它看起来像这样:

    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() 方法仅在我物理单击复选框时调用,而不是在 checkAllFlavors() 函数中通过将 checked 属性设置为 true 来更改复选框的选中状态时调用。

复选框的更改状态是否仅通过 GUI 交互而不是通过设置属性来改变$(elem).prop('checked', true)

4

3 回答 3

2

您必须changecheckAllFlavors函数中手动触发事件:

function checkAllFlavors () {
   $('#flavorFilterContainer input.flavor-filter').prop('checked', true).change();
}

顺便说一句,您应该缓存该选择器。

于 2013-01-24T19:18:49.713 回答
1

我从jQuery 论坛找到了这个答案:

$.propHooks.checked = {
  set: function(elem, value, name) {
    var ret = (elem[ name ] = value);
    $(elem).trigger("change");
    return ret;
  }
};

此解决方案是一个自定义处理程序,用于通过“prop”方法对“checked”进行更改。此处理程序根据需要触发更改事件,但您不必手动指定它。

于 2013-07-30T12:14:36.863 回答
0

检查http://jsfiddle.net/nGQKw/7/上的示例希望它能解决您的问题。实际上,您必须trigger changecheckAllFlavors()

于 2013-01-24T19:33:01.463 回答