JS杂货清单应用如何实现回车键触发添加及空输入拦截功能
杂货清单应用问题修复方案
问题根源
add函数没有做触发条件判断:绑定了keydown事件后,任意按键触发都会直接执行新增逻辑,没有限制仅回车键生效- 缺少空输入校验:输入框内容为空时也会把空字符串加入清单
- 回车键判断逻辑错误放置在
displayGroceries的循环中,属于完全冗余的错误代码,会导致重复触发新增
修正后的完整JavaScript代码
let addButton = document.getElementById('add-button'); addButton.addEventListener('click', add); let addInput = document.getElementById('add-input'); addInput.addEventListener('keydown', add); let groceryList = [] // 给add函数新增event参数接收事件对象 function add(event) { // 判断触发场景:如果是键盘事件,仅回车键才继续执行 if (event.type === 'keydown' && event.keyCode !== 13) { return } // 空值校验:去除首尾空格后为空则不执行新增 const groceryInput = addInput.value.trim() if (!groceryInput) { return } groceryList.push(groceryInput); addInput.value = ''; displayGroceries(); } function remove(event) { let position = event.currentTarget.id; groceryList.splice(position, 1); displayGroceries(); } function displayGroceries() { let groceryUl = document.getElementById('grocery-ul'); groceryUl.innerHTML = ''; for (var i = 0; i < groceryList.length; i++) { let groceryLi = document.createElement('li'); groceryLi.innerHTML = groceryList[i]; groceryUl.appendChild(groceryLi); let removeButton = document.createElement('button'); removeButton.innerText = "Remove"; removeButton.addEventListener('click', remove); removeButton.id = i; groceryLi.appendChild(removeButton); } }
核心修改说明
- 给
add函数新增了事件对象参数,判断如果是键盘触发的事件,只有按键为回车键(keyCode=13)才继续执行 - 新增输入内容校验,对输入值做trim处理后为空的话直接终止函数,不会新增空条目
- 删除了
displayGroceries中错误放在循环里的回车键判断逻辑,避免重复触发新增
内容的提问来源于stack exchange,提问作者user15987286
相关产品推荐
相关产品推荐

