我有以下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
参数传递给被调用的函数?这里发生了什么?我该如何解决这个问题?
请不要jquery,它不可用。
答案 0 :(得分:4)
您不接受e
参数。
在您的工作活动中,您使用e
(如果它存在的话)(如果它不存在),或者如果它没有,则回到window.event
:
(e ? e : window.event)
破坏的事件监听器中不存在类似的检查。
确保您接受名为e
的参数:
field.addEventListener("keydown", function(e) {
...它将在您的代码中提供。