0

私は最も奇妙なループと戦ってきました。コードを単純化して、これら 2 つのほぼ同一の jsFiddle にしました。

  1. http://jsfiddle.net/brentonstrine/crzTB/5/ (無限ループ)
  2. http://jsfiddle.net/brentonstrine/crzTB/7/ (期待どおりに実行されます)

そのうちの 1 つがループに陥ります (コンソールを開いてください)。それらの1つはそうではありません。

唯一の違いはクラス名です。真剣に、それらを 2 つのタブで開き、前後に移動します。それらは同一です。

複数のコンピューターの Chrome、Firefox、および IE でこれをテストし、最初に開くコンピューターを変えました。毎回同じ結果。どうして??????????????

$("body").on("keydown", ".fixedValue:not(input)", function (e) {
    e.preventDefault();
    console.log("the div (which is not input?) was triggered.");

    $(".fixedValue input").trigger("keydown", e.keyCode);
});

$(".fixedValue input").on("keydown", function (e) {
    console.log("input (e.g. not the div) triggered.");
});
4

2 に答える 2

3

ループに陥らないものは、 class を持つアイテム内に入力がないfixedValueため、トリガーされる入力はありません。

于 2012-11-21T02:50:25.017 に答える
1

JayCが言ったように、1つが繰り返されない理由は、クラス名のすべてのインスタンスを変更しなかったためです。実際の問題を解決するには、次のことを試してください。

$(".fixedValue input").on("keydown", function (e) {
    e.stopPropagation();
    console.log("input (e.g. not the div) triggered.");
});

ここを参照してください。

キーダウンイベントは、親divにバブリングしてから、子で再びトリガーされました。

于 2012-11-21T02:54:10.483 に答える