首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery活的,支撑的,改变的

jQuery活的,支撑的,改变的
EN

Stack Overflow用户
提问于 2013-01-24 19:17:30
回答 3查看 2.1K关注 0票数 3

当几个复选框中的任何一个的“选中”状态被更改时,我需要触发一个事件,而不是通过监听单击来实现这一点。为什么?

看起来是这样的:

代码语言:javascript
复制
    BUILD YOUR SUNDAE!
    All Flavors []     Chocolate [ ]   Vanilla [ ] Strawberry [ ]  Pistacchio [ ]

当单击所有口味时,所有其他复选框都将被设置为选中:

代码语言:javascript
复制
function checkAllFlavors() {
   $("#flavorFilterContainer input.flavor-filter").each(function (i, elem) {
       $(elem).prop('checked', true);
   });
 }

上面的功能显然有效--所有的复选框都会被选中。然而,如果我听到这样的状态变化:

代码语言:javascript
复制
      ("#flavorFilterContainer input.flavor-filter").live('change', function () {
           DispenseFlavor()
      });

只有当我物理地单击复选框时,DispenseFlavor()方法才会被调用,而不是当复选框的选中状态通过将选中的属性设置为checkAllFlavors()函数时更改时调用。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-24 19:18:49

您必须从您的change函数中手动触发checkAllFlavors事件:

代码语言:javascript
复制
function checkAllFlavors () {
   $('#flavorFilterContainer input.flavor-filter').prop('checked', true).change();
}

顺便说一句,你应该缓存那个选择器。

票数 2
EN

Stack Overflow用户

发布于 2013-07-30 12:14:36

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

代码语言:javascript
复制
$.propHooks.checked = {
  set: function(elem, value, name) {
    var ret = (elem[ name ] = value);
    $(elem).trigger("change");
    return ret;
  }
};

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

票数 1
EN

Stack Overflow用户

发布于 2013-01-24 19:33:01

查看http://jsfiddle.net/nGQKw/7/上的示例,希望它能解决您的问题。实际上,您必须手动在trigger change事件中为checkAllFlavors()中的复选框设置checkAllFlavors()事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14509014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档