父母单击时,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');});
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冒泡问题