【发布时间】:2020-06-04 09:55:53
【问题描述】:
为什么当我按下 ENTER 键时会触发表单中第一个按钮的 onclick?我试图弄清楚为什么 onclick 是由 ENTER 键触发的,然后如果它是实际的鼠标/点击按钮单击则让函数继续执行,或者如果它是 ENTER 键则让函数忽略按键。
我尝试检查 event.keyCode(传递到 javascript 函数),但它未定义。
实际上似乎设置的唯一属性是 event.isTrusted 但不存在其他属性。
编辑:创建新的演示代码以更好地解释我遇到的问题...
这是解决问题的 js:https://jsfiddle.net/Ld142qx3/24/
当您将光标放在 Quantity 2 输入框(第二个框)并单击 Enter 时,它会为 Quantity 1 输入框前面的第一个 LESS 按钮触发 onclick 事件。
没有通过事件传入的keyCode属性来识别onclick实际上是由鼠标点击触发还是由ENTER键触发。
我原来的测试代码HTML是:
<form onsubmit="return false;">
Quantity 1: <button id="b1-less" onclick="return b1Less(this.id, event);">less</button>
<input type="text" id="q1" value="10" size="10">
<button id="b1-more" onclick="return b1More(this.id, event);">more</button>
<br>
Quantity 2: <button id="b2-less" onclick="return b2Less(this.id, event);">less</button>
<input type="text" id="q2" value="5" size="10">
<button id="b2-more" onclick="return b2More(this.id, event);">more</button>
</form>
我原来的 javascript 是:
function b1Less(_id, _event) {
alert(_event.keyCode);
_val = parseInt(document.getElementById('q1').value);
_val = _val - 1;
document.getElementById('q1').value = _val;
return false;
}
function b1More(_id, _event) {
_val = parseInt(document.getElementById('q1').value);
_val = _val + 1;
document.getElementById('q1').value = _val;
return false;
}
function b2Less(_id, _event) {
_val = parseInt(document.getElementById('q2').value);
_val = _val - 1;
document.getElementById('q2').value = _val;
return false;
}
function b2More(_id, _event) {
_val = parseInt(document.getElementById('q2').value);
_val = _val + 1;
document.getElementById('q2').value = _val;
return false;
}
【问题讨论】:
-
您为什么期望在
click事件上定义keyCode?尝试将onkeyup="doClickMeButton(event, this.id)"添加到您的input中,您将看到 keyCode 值... -
@jsherk 我已经上传了你可以检查的答案,只是好奇为什么会出现点击我按钮你想要实现什么功能
-
@Adityatoke 我刚刚重新创建了新的演示代码,可以更好地显示我遇到的问题。我删除了 CLICK ME 按钮。
-
@Nick ENTER 键导致 onclick 触发,但没有 keyCode 属性来确定它是通过鼠标单击还是 ENTER 键触发的。我创建了新的演示代码以更好地显示问题。
-
@jsherk 你可以查看我的答案,如果它解决了你的问题,请告诉我
标签: javascript html