1

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

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

这是脚本:

  $('#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>

单击表单内的任何内容时都会触发上面的处理程序。甚至是传说或只是形式中的背景。即使它应该只触发 NAV 中的元素。导航没有重叠或任何东西。

顺便说一句:我正在调用 document.createElement('nav'); 早些时候

关闭 Knockout 似乎可以解决问题....但整个事情都是围绕淘汰赛构建的。所以这不是一个真正的选择。根据http://knockoutjs.com/documentation/browser-support.html应该支持它。(淘汰赛3也有同样的问题)

这是我正在使用的库的列表:

  • es5-垫片
  • 全球化
  • 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
  • 现代主义-2.6.2
  • mvcfoolproof.unobtrusive
  • 要求
  • ss(脚本锐化)
4

1 回答 1

0

我想我找到了问题所在。使用 RequireJS 将这个小脚本移动到库中后,一切都解决了:

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

我不认为这个脚本有什么问题。我的理论如下:

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

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

于 2013-11-05T13:54:24.323 回答