onkeydown事件变量打破了EventListener代码

时间:2016-09-20 07:32:42

标签: javascript dom javascript-events event-handling

我有以下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,它不可用。

1 个答案:

答案 0 :(得分:4)

您不接受e参数。

在您的工作活动中,您使用e(如果它存在的话)(如果它不存在),或者如果它没有,则回到window.event

(e ? e : window.event)

破坏的事件监听器中不存在类似的检查。

确保您接受名为e的参数:

field.addEventListener("keydown", function(e) {

...它将在您的代码中提供。