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'); を呼び出しています。ついさっき

ノックアウトをオフにすると、問題が解決するようです....しかし、すべてはノックアウトを中心に構築されています。したがって、それは実際にはオプションではありません。http://knockoutjs.com/documentation/browser-support.htmlによると、サポートされているはずです。(ノックアウト 3 にも同じ問題があります)

私が使用しているライブラリのリストは次のとおりです。

  • es5-シム
  • グローバル化する
  • jquery-1.10.2
  • jquery-ui-1.10.3
  • jquery.json-date-parser
  • jQuery.mCustomScrollbar
  • jQuery.マウスホイール
  • jquery.unobtrusive-ajax
  • jquery.validate.hook
  • jquery.validate
  • jquery.validate.控えめな
  • ノックアウト-2.3.0
  • modernizr-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 の 2 つの異なるインスタンスを操作していたと思います。しかし、それぞれが同じ jQuery キャッシュにアクセスしているため、見返りにいくつかの要素で一見ランダムなハンドラーがトリガーされていました。

すべての jQuery アクセスが RequireJS 経由であることを確認したので、問題は解決したようです。

于 2013-11-05T13:54:24.323 に答える