onkeydown事件变量破坏EventListener代码

onkeydown event variable breaking the EventListener code

本文关键字:EventListener 代码 事件 变量 onkeydown      更新时间:2023-09-26

我有以下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) {

…它将在您的代码中可用