jQuery live,prop和change

时间:2013-01-24 19:17:31

标签: jquery prop

我需要在“检查”时发起一个事件。更改了几个复选框中的任何一个的状态,并且不是通过侦听单击来执行此操作。为什么呢?

看起来像这样:

    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)设置属性?

3 个答案:

答案 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)

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

中手动选中change checkAllFlavors()个事件。