jquery .find 适用于除 IE 之外的所有浏览器
我用 ul 和 li 构建了一棵树。每个 li 都有一个带有一些文本的复选框。当检查父元素时,我需要检查所有子元素。我用以下代码完成了它,该代码在 FF 和 Chrome 中有效,但在 IE 中无效...
function checkSC(el){
var $parent = $(el).parent();
$($parent).find('input[type="checkbox"]').attr("checked", el.checked);
}
html 如下所示:
<ul id="treeUL" class="treeview-black treeview">
<li class="collapsable">
<div class="hitarea collapsable-hitarea"></div>
<input type="checkbox" onchange="checkSC(this)" value="26" name="chkComm">
Conseil d'Administration
<ul>
<li>
<input type="checkbox" onchange="checkSC(this)" value="29" name="chkComm[29]">
Bureau
</li>
<li>
<input type="checkbox" onchange="checkSC(this)" value="31" name="chkComm[31]">
Comité de Direction
</li>
<li class="last">
<input type="checkbox" onchange="checkSC(this)" value="62" name="chkComm[62]">
Administrateurs Suppléants
</li>
</ul>
</li>
I have a tree build with ul and li. Each li has an checkbox with some text. I need to check all child elements when the parent element is checked. I did it with following code, which works in FF and Chrome but not in IE...
function checkSC(el){
var $parent = $(el).parent();
$($parent).find('input[type="checkbox"]').attr("checked", el.checked);
}
The html looks like this:
<ul id="treeUL" class="treeview-black treeview">
<li class="collapsable">
<div class="hitarea collapsable-hitarea"></div>
<input type="checkbox" onchange="checkSC(this)" value="26" name="chkComm">
Conseil d'Administration
<ul>
<li>
<input type="checkbox" onchange="checkSC(this)" value="29" name="chkComm[29]">
Bureau
</li>
<li>
<input type="checkbox" onchange="checkSC(this)" value="31" name="chkComm[31]">
Comité de Direction
</li>
<li class="last">
<input type="checkbox" onchange="checkSC(this)" value="62" name="chkComm[62]">
Administrateurs Suppléants
</li>
</ul>
</li>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
请改用 onclick。 IE 似乎会等到你模糊了复选框。另外,只要您使用 jQuery,就可以使用它将事件处理程序分配给对象,而不是内联函数。
如果您仅将此处理程序添加到特定复选框,您可能需要更改选择器。
Use onclick instead. IE seems to wait until you've blurred the checkbox. Also, as long as you are using jQuery, use that to assign event handlers to objects instead of inline functions.
You may want to alter the selector if you are only adding this handler to specific checkboxes.
尝试用“onclick”代替“onchange”。
onchange 不是复选框的有效事件。请参阅http://www.w3schools.com/jsref/event_onchange.asp
Try 'onclick' in place of 'onchange'.
onchange is not a valid event for checkbox. see http://www.w3schools.com/jsref/event_onchange.asp
$parent 已经是一个 jQuery 对象了。您不需要将其包装在另一个 jQuery 对象中。这与执行相同的操作:
$parent is a jQuery object already. You don't need to wrap it in another jQuery obj. It's the same of doing:
我认为问题可能来自 onchange 函数中使用的
this
关键字。本文 https://forloop.co.uk/blog/ event-internals-in-jquery-part-one 解释了 jQuery 如何处理事件,作为一个有趣的警告,说明
this
在事件中如何解释的模型之间的差异:解决方案是使用 jQuery 绑定处理程序,从而不必处理不同浏览器的差异。
I think the problem might come from the
this
keyword used in your onchange function.This article https://forloop.co.uk/blog/event-internals-in-jquery-part-one which explains how jQuery handles events as an interesting warning about the difference between models for how
this
is interpreted in events:The solution would be to bind your handler using jQuery and thus not having to deal with the different browsers dissimilarities.