3

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

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

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

更改调用顺序可能会解决一个问题,但有引发另一个问题的风险。请注意,委托处理互斥元素,因此顺序应该无关紧要。

这是什么原因造成的?

4

3 回答 3

0

我无法提供解释;但我在 IE8 中遇到过类似的行为。奇怪的是,在我的情况下,如果我重新排列绑定,以便我的一个复选框上的委托绑定在其他表单元素上的委托绑定之前出现,那么一切都运行良好。复选框处理程序之前的链接上的委托单击处理程序似乎没有引起问题。

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

有很多变量需要考虑,在这里很难解释所有变量。例如,对我造成问题的复选框的委托选择器是一个 id 选择器,而无害复选框的选择器是一个类。

于 2011-01-22T02:57:50.203 回答
0

我也遇到了这个。出于某种原因,颠倒注册事件的顺序为我修复了它。不过,我希望有一个解释。

于 2011-05-02T21:01:38.550 回答
0

看来问题已在最新版本的 jQuery 或 Internet-Explorer 中得到解决(在撰写本文时,分别为 1.5 和 9)。

于 2011-04-11T09:40:14.213 回答