【问题标题】:jQuery's delegate conflict with another delegate in IEjQuery 的委托与 IE 中的另一个委托冲突
【发布时间】:2011-04-07 16:17:19
【问题描述】:

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

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

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

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

是什么原因造成的?

【问题讨论】:

    标签: internet-explorer-8 jquery-1.4


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-08
          • 1970-01-01
          • 2018-01-01
          • 1970-01-01
          相关资源
          最近更新 更多