jQuery在IE8中触发错误元素上的click事件

时间:2013-11-04 11:31:52

标签: jquery knockout.js

我有这个问题只发生在IE8中。它适用于所有最新的浏览器IE10,Chrome 30,FireFox 24

以下是问题: 我在选择器上设置了一个click事件,但它也在其他元素上触发了

这是剧本:

  $('#side-nav .nav-node-branch > a').click(function (eevent) {
    var el = $(eevent.target);
      if (el.is('#side-nav .nav-node-branch > a'))
        // all is well
      else
        // sometimes arrives here, HOW???
  }

以下是简化的HTML结构:

<html><body>
  <nav id="side-nav">
    // 
    <ul>
      <li class="nav-node-branch"><a href="http://google.com">link</a></li>
    </ul>
  </nav>
  <div class="content-area">
    <form data-bind="submit: submitSearch" class="indented" novalidate="novalidate">
    <fieldset>
        <legend>Bestellung für</legend>
        <ul>
            <li>
                <span>
                    <input checked="checked" data-bind="checked: IsEmployeeSelf" data-val="true" data-val-required="The IsEmployeeSelf field is required." id="IsEmployeeSelfYes" name="IsEmployeeSelf" type="radio" value="true">
                    <label for="IsEmployeeSelfYes">Eigene Person</label>

                    <input data-bind="checked: IsEmployeeSelf" id="IsEmployeeSelfNo" name="IsEmployeeSelf" type="radio" value="false">
                    <label for="IsEmployeeSelfNo">Andere Person</label>
                </span>
            </li>
        </ul>
    </fieldset>
    </form>
  </div>
</body></html>

单击表单内的ANYTHING时会触发上面的处理程序。甚至是传说或只是表格中的背景。 即使它只应触发资产净值中的元素。导航没有重叠或任何东西。

BTW:我正在调用document.createElement('nav');较早

关闭Knockout似乎可以解决问题.... 但整个事情是围绕淘汰赛。所以这不是一个真正的选择。 根据{{​​3}},它应该得到支持。 (淘汰赛3有同样的问题)

以下是我正在使用的库列表:

  • ES5-垫片
  • Globalize的
  • 的jquery-1.10.2
  • 的jquery-UI-1.10.3
  • jquery.json最新解析器
  • jQuery.mCustomScrollbar
  • jQuery.mousewheel
  • jquery.unobtrusive-AJAX
  • jquery.validate.hook
  • jquery.validate
  • jquery.validate.unobtrusive
  • 敲除2.3.0
  • Modernizr的-2.6.2
  • mvcfoolproof.unobtrusive
  • 需要
  • ss(scriptsharp)

1 个答案:

答案 0 :(得分:0)

我想我发现了这个问题。 使用RequireJS将这个小脚本移到库中后解决了所有问题:

$('input').keypress(function (e) {
    // If the key pressed was enter
    if (e.which == '13') {
        $(this).closest('form').submit();
    }
});

我认为这个剧本没有任何问题。我的理论如下:

我使用requireJS加载我的所有库。然而,上面的这个小脚本没有RequireJS加载。我的猜测是,我在两个不同的jQuery实例上运行。但每个访问相同的jQuery Cache,反过来在某些元素上触发看似随机的处理程序。

我现在确保所有jQuery访问都是通过RequireJS进行的,这似乎可以解决我的问题。