【发布时间】:2019-05-25 14:11:42
【问题描述】:
我希望下面列出的程序的行为是这样的:
- 我点击输入。
- 我按回车键。
- 出现“再次按 Enter”行。
- 我通过单击页面上的某处退出输入。
- 我按 Enter。
- 然后出现“您已按 Enter 2 次”行。
这个程序的真实行为:
- 我点击输入。
- 我按回车键。
- 出现“再次按 Enter”和“您已按 Enter 2 次”行。
我有两个问题:
1) 这是什么原因?我只按了一次 Enter。 2) 如何让这个程序按照我期望的方式运行?
let input = document.createElement("input");
input.value = "Click on this field and press Enter";
input.addEventListener("keydown", function(){
if(event.keyCode === 13){
let div2 = document.createElement("div");
div2.innerHTML = "Press Enter once again";
document.addEventListener("keydown", function(){
if(event.keyCode === 13){
let div3 = document.createElement("div");
div3.innerHTML = "You have pressed Enter 2 times";
document.body.appendChild(div3);
}
});
document.body.appendChild(div2);
}
});
document.body.appendChild(input);
【问题讨论】:
-
您正在附加事件侦听器两次。使用
.preventDefault()? -
这个事件监听器被添加到不同的元素中。 .preventDefault() 没有帮助。
-
另外,您已将事件侦听器附加到
document而不是字段。随着事件冒泡,document事件监听器执行。 -
这是故意的。第一个 Enter 应该在字段上按,第二个可以在任何地方按
-
啊。好的。使用
event.stopPropagation()。
标签: javascript events keydown dom-events onkeydown