似乎在IE中,一些代表可能以某种方式导致另一个代表无法工作。
这是一种可能的情况:
<html>
<head>
<script src='jquery-1.4.2.min.js'></script>
<script>
$(function() {
$('#main')
.delegate('div', 'click', function() {
alert('on div!');
})
.delegate('[name=first]', 'change', function() {
alert('first!');
})
.delegate('[name=second]', 'change', function() {
alert('second!');
})
;
});
</script>
</head>
<body>
<div id="main">
<input name="first" />
<input name="second" type="checkbox" />
<div>Test</div>
</div>
</body>
</html>
在这种特殊情况下,复选框的处理程序不会触发。
像往常一样,问题不会出现在其他浏览器中。
更改通话单可能会解决问题,但可能会导致另一个问题。请注意,委托对互斥元素起作用,因此顺序应该是无关紧要的。
是什么导致这种情况?
答案 0 :(得分:0)
我不能提供解释;但我在IE8中遇到过类似的行为。奇怪的是,在我的情况下,如果我重新安排绑定,一切都运行良好,以便我的一个复选框上的委托绑定在委托绑定其他表单元素之前。在复选框处理程序之前,链接上的委派单击处理程序似乎不会导致问题。
在我的情况下,我在复选框上有一个单击处理程序,在选择框上有两个更改处理程序,单选按钮上有两个单击处理程序,另一个复选框上有另一个单击处理程序,链接上有几个单击处理程序。
要考虑很多变量,很难在这里考虑所有这些变量。例如,为我引起问题的复选框的委托选择器是一个id选择器,而无害复选框的选择器是一个类。
答案 1 :(得分:0)
似乎问题已在最新版本的jQuery或Internet-Explorer中解决(截至本文撰写时分别为1.5和9)。
答案 2 :(得分:0)
我也碰到了这个。出于某种原因,撤销注册事件的顺序为我修复了它。我喜欢解释。