jQuery委托与IE中的另一个委托冲突

时间:2010-09-03 04:35:39

标签: internet-explorer-8 jquery-1.4

似乎在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>

在这种特殊情况下,复选框的处理程序不会触发。

像往常一样,问题不会出现在其他浏览器中。

更改通话单可能会解决问题,但可能会导致另一个问题。请注意,委托对互斥元素起作用,因此顺序应该是无关紧要的。

是什么导致这种情况?

3 个答案:

答案 0 :(得分:0)

我不能提供解释;但我在IE8中遇到过类似的行为。奇怪的是,在我的情况下,如果我重新安排绑定,一切都运行良好,以便我的一个复选框上的委托绑定在委托绑定其他表单元素之前。在复选框处理程序之前,链接上的委派单击处理程序似乎不会导致问题。

在我的情况下,我在复选框上有一个单击处理程序,在选择框上有两个更改处理程序,单选按钮上有两个单击处理程序,另一个复选框上有另一个单击处理程序,链接上有几个单击处理程序。

要考虑很多变量,很难在这里考虑所有这些变量。例如,为我引起问题的复选框的委托选择器是一个id选择器,而无害复选框的选择器是一个类。

答案 1 :(得分:0)

似乎问题已在最新版本的jQuery或Internet-Explorer中解决(截至本文撰写时分别为1.5和9)。

答案 2 :(得分:0)

我也碰到了这个。出于某种原因,撤销注册事件的顺序为我修复了它。我喜欢解释。