复选框更改事件未触发

14

这是我的代码:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    $('.chk').live('change', function() {
      alert('change event fired');
    });
    $('a').click(function() {
      $('.chk').attr('checked', true);
    });
  });
</script>
</head>
<body>
<div class="chkHolder">
  <input type="checkbox" class="chk" name="a" id="a" />
  <input type="checkbox" class="chk" name="b" id="b" />
</div>
<a href="#">check all</a>
</body>
</html>
当我点击“全选”超链接时,我希望每个复选框都触发变更事件。然而,这并没有发生。
有任何想法吗?
非常感谢!

页面是否正在重新加载?您可能需要在click()处理程序中添加return false;preventDefault() - andyb
4个回答

34

5
有人知道为什么我们需要明确地去做它吗? - lulalala
5
@lulalala因为该元素上没有触发任何事件,它只是在设置一个属性。change()会触发change事件。 - Neha Choudhary

7
当你改变属性时,也需要使用以下内容:
$('.chk').trigger('change');

或者像其他人建议的那样,在您的代码中:

$('.chk').attr('checked', true).trigger('change');

3
尝试更改。
$('a').click(function() {
      $('.chk').attr('checked', true);
});

To -

$('a').click(function() {
      $('.chk').attr('checked', true).trigger('change');
 });

这将强制触发“change”事件。

工作演示 - http://jsfiddle.net/ipr101/pwmBE/


3
记住 jQuery 可以链式调用多个命令,您无需两次查找 .chk。 - voigtan
@voigtan - 谢谢,我完全忽略了那个。我已经相应地更新了答案。 - ipr101

0

试试这个。

<div id ="chkall"> <a href="#">check all</a> <div>

            $('#chkall a').live("change", function() {
            $('.chk').attr('checked', true);
            });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接