You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用keydown事件时如何避免按下回车键添加多余购物清单项

问题原因

  • 事件绑定对象错误:keydown事件绑定在了全局document上,无论焦点是否在输入框,按回车都会触发添加逻辑,导致多余条目生成。
  • 条件判断逻辑错误:if判断中使用了逗号运算符,仅最后一个表达式event.key === 'Enter'会生效,输入框为空的情况下按回车也会添加空条目。
  • 未阻止默认行为:输入框中按回车可能触发默认的表单提交等行为,导致重复提交。

修正方案

优化后JS代码

我们可以把新增条目的逻辑抽为公共函数,避免重复代码,再修正事件绑定和判断逻辑:

var button = document.getElementById("enter");
var input = document.getElementById("userinput");
var ul = document.querySelector("ul");

// 抽离公共的新增条目逻辑
function addItem() {
  // 增加trim去除首尾空格,避免录入全空格的无效条目
  if (input.value.trim().length > 0) {
    var li = document.createElement("li");
    li.appendChild(document.createTextNode(input.value));
    ul.appendChild(li);
    input.value = "";
  }
}

button.addEventListener("click", addItem);

// 把keydown事件绑定到输入框本身,而不是全局document
input.addEventListener('keydown', function (event) {
  // 把逗号替换为逻辑与&&,同时满足两个条件才执行
  if (input.value.trim().length > 0 && event.key === 'Enter') {
    event.preventDefault(); // 阻止回车默认行为
    addItem();
  }
});

HTML代码无需修改

<input type='text' id='userinput' />
<button type='button' id='enter'>Enter</button>
<ul></ul>

内容的提问来源于stack exchange,提问作者IamIchiban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:18:02