代码之家  ›  专栏  ›  技术社区  ›  RichN

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

  •  3
  • RichN  · 技术社区  · 14 年前

    在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 回复  |  直到 13 年前
        1
  •  0
  •   Jesse Hallett    13 年前

    我不能给出解释,但我在IE8中遇到过类似的行为。奇怪的是,在我的例子中,如果我重新排列绑定,使其中一个复选框上的委托绑定先于其他表单元素上的委托绑定,那么一切都会很好地工作。复选框处理程序之前链接上的委派单击处理程序似乎不会导致问题。

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

    有很多变量需要解释,很难解释所有这些变量。例如,引起我问题的复选框的委托选择器是ID选择器,而无害复选框的选择器是类。

        2
  •  0
  •   RichN    13 年前

    似乎问题已经在jquery或InternetExplorer的最新版本中解决了(在本文中,分别是1.5和9)。

        3
  •  0
  •   Jason    13 年前

    我也碰到了这个。出于某种原因,颠倒了登记事件的顺序,为我修复了它。不过,我还是想解释一下。

    推荐文章