在一组对象上使用触发器

时间:2012-02-04 17:12:57

标签: javascript jquery

对于jquery来说有些新鲜,但我非常喜欢它,过去几周我一直在通过开发进行概念验证。

我正在尝试在多个对象上实现触发器,但无论我做什么,它只会触发集合中的第一个对象。我知道triggerHandler有这个限制,但现在应该触发。我认为,对于触发器,这将起作用!请帮忙!

这就是我目前所拥有的:

一堆具有相同类别的输入框(例如

input type="checkbox" id="checkX" class="allchecks" value="show" />`

然后是一个按钮,我想触发所有这些按钮并在每个

上运行点击处理程序
<input type="button" value="select all" value="click me" id="button1" />

则...

$j('#button1').click(function(){
  $j('.allchecks').each(function(){
       if(!$j(this).is(':checked')){   
           $j(this).trigger('click');
       }
  }); // end each
}); // end click

似乎无论我做什么,只有第一个对象有它的绑定点击事件被触发。

非常感谢任何建议。

更新:出于沮丧,我编写了相同的代码,除了不使用每个循环我手动触发每个循环,它以相同的方式失败 - 它只触发第一个对象上的事件并停止。

更新:以下是绑定到输入的点击事件的示例:

$j('#checkx').click(function(){ /* do something */ }); //end click

更新:oops复制/粘贴错误,修复它。但它并没有减损这个问题。

2 个答案:

答案 0 :(得分:1)

您的代码缺少)

if(!$j(this).is(':checked'){   

请参阅fiddle

PS。您不需要.each

$j('#button1').click(function(){
  $j('.allchecks:not(:checked)').trigger('click');
}); // end click

请参阅updated fiddle

编辑您在多个元素上使用相同的ID,这是禁忌。它不起作用,现在你已经看到了原因,你再也不会这样做了; - )

$j('.allchecks').click(function(){ /* do something */ });

答案 1 :(得分:0)

您不需要触发点击事件来选中复选框,只需使用prop方法将checked设置为true即可。请参阅demo

$('#button1').click(function(){
    $('.allchecks').prop('checked', true);
});