父母单击时,JQuery单击子项

我有一个漫长的一天….

我在下面有这个代码

它应该点击复选框。 我不能通过名称,类或id来区分,我必须使用该类型。 我还需要确保它在父div中,而不是别的。

知道为什么这不起作用吗? 我确定我只是有一个愚蠢的时刻。 :\

谢谢

HTML

 

使用Javascript

 $('div.background').click(function() { var checkBox = $(this).find('input:checkbox'); checkBox.attr('checked', !checkBox.attr('checked')); }); 

在使用jQuery时,您可能不应该使用onclick属性来绑定事件处理程序。

主要问题是你将字符串传递给jQuery。 该字符串被解释为选择器,并将查找类型为checkbox的元素, this元素是this类型元素的后代。 显然,这不会存在。

你想要更像这样的东西:

 $("div.background").click(function() { $(this).find(":checkbox").click(); }); 

或者,您可以this作为上下文传递给jQuery(相当于使用find ):

 $("div.background").click(function() { $(":checkbox", this).click(); }); 

请注意,我正在使用:checkbox而不是checkbox (使用checkbox 。 这是一个匹配checkbox类型的input元素的选择器。

但是,这可能存在很大问题。 你将陷入无限循环(因为DOM事件在树上冒泡)。 您需要捕获复选框上的click事件并停止在那里传播它。

你需要这样的吗?

  $("input[type=checkbox]").click(function(){ alert('Checked');});​ 

http://jsfiddle.net/JF2xu/1/

 
 onclick="$(this).find(':checkbox').attr('checked','checked')" 

你把它作为一个字符串传递,而不是作为一个对象。 Jquery不会理解这个的范围。 考虑将html之外的函数附加到单独的关注点

试试这个它将允许用户检查/取消选中,并且不会传播创建循环的事件。

 

使用Javascript

  $(document).ready(function(){ $(".background").click(function(e){ var chk = $($(this).find("input[type='checkbox']")); if(chk.attr('checked')) { chk.attr('checked',false); }else{ chk.attr('checked',true); } }); }); 

示例: http : //jsfiddle.net/fycFB/

你的jQuery正在寻找一个不存在的标签。 你不应该内联你的JS。 并且.click()在添加新元素时不会检查DOM,因此请尝试以下操作:

 

然后让它实际检查复选框使用(这是jQuery 1.7):

 $(".background").on("click",function(e) { var chk = $(this).find('input[type=checkbox]')[0]; chk.checked = !chk.checked; });​ 

这个解决方案没有遇到James描述的DOM冒泡问题