我一直在与最奇怪的循环作斗争。我将我的代码简化为这两个几乎相同的jsFiddles。
- http://jsfiddle.net/brentonstrine/crzTB/5/(无限循环)
- http://jsfiddle.net/brentonstrine/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.");
});
没有陷入循环的那个在具有类 fixedValue
的某个项目中没有输入,因此没有要触发的输入。
正如 JayC 所说,那个不递归的原因是因为你没有更改类名的所有实例。要解决您的实际问题,请尝试以下操作:
$(".fixedValue input").on("keydown", function (e) {
e.stopPropagation();
console.log("input (e.g. not the div) triggered.");
});
看这里。
键向下事件冒泡到父div,然后在子级上再次触发。