我有以下Javascript代码:
var field = document.createElement("INPUT");
field.type = "text";
field.addEventListener("blur", function() {
// stuff that works
(e ? e : window.event).stopPropagation();
return false;
};
field.addEventListener("keydown", function() {
alert("1");
if (e) {
alert("2");
} else {
alert("3");
e = window.event;
}
alert("4");
if (e.keyCode === 13) {
this.blur();
}
return true;
}
输入字段不在表单中。按enter键或移出焦点意味着将字段值提交给服务器(我无法更改现有代码)。onblur
事件正常,onkeydown
事件不正常。alert("1")
完全执行,但仅此而已。没有别的事情发生。
我已经尝试了周围的实验,我的猜测是,e
的存在是打破代码。我不知道如何:不所有的事件监听器传递一个e
参数被调用的函数?这是怎么回事?我该如何解决这个问题?
您不接受e
参数。
在你的工作事件中,如果e
存在,你使用它(它不会),或者如果它不存在,你就回退到window.event
:
(e ? e : window.event)
在故障事件侦听器中不存在类似的检查。
确保您接受一个名为e
:
field.addEventListener("keydown", function(e) {
…它将在您的代码中可用