0

我一直在与最奇怪的循环作斗争。我将我的代码简化为这两个几乎相同的 jsFiddles。

  1. http://jsfiddle.net/brentonsrine/crzTB/5/(无限循环)
  2. http://jsfiddle.net/brentonsrine/crzTB/7/(按我的预期运行)

其中一个卡在一个循环中(打开你的控制台)。其中之一没有。

唯一的区别是类名。说真的,在两个选项卡中打开它们,然后返回第四个。它们是相同的。

我已经在多台计算机上的 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 所说,不递归的原因是您没有更改类名的所有实例。要解决您的实际问题,请尝试以下操作:

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

这里

keydown 事件冒泡到父 div,然后在子 div 上再次触发。

于 2012-11-21T02:54:10.483 回答