Javascript 为什么当我按ENTER键(事件中没有键代码)时,会触发表单中第一个按钮的onclick?

Javascript 为什么当我按ENTER键(事件中没有键代码)时,会触发表单中第一个按钮的onclick?,javascript,html,Javascript,Html,为什么当我按ENTER键时,表单中第一个按钮的onclick会被触发?我试图弄清楚为什么onclick是由ENTER键触发的,然后如果是实际的鼠标/点击按钮单击,则让功能继续,或者如果是ENTER键,则让功能忽略按键 我尝试检查event.keyCode(传递到javascript函数中),但它没有定义 事实上,唯一似乎要设置的属性是event.isTrusted,但不存在其他属性 编辑:创建新的演示代码,以更好地解释我的问题 以下是js对问题的处理: 当您将光标放在数量2输入框(第二个框)中并

为什么当我按ENTER键时,表单中第一个按钮的onclick会被触发?我试图弄清楚为什么onclick是由ENTER键触发的,然后如果是实际的鼠标/点击按钮单击,则让功能继续,或者如果是ENTER键,则让功能忽略按键

我尝试检查event.keyCode(传递到javascript函数中),但它没有定义

事实上,唯一似乎要设置的属性是event.isTrusted,但不存在其他属性

编辑:创建新的演示代码,以更好地解释我的问题

以下是js对问题的处理:

当您将光标放在数量2输入框(第二个框)中并单击enter时,它会为数量1输入框前面的第一个较少按钮触发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>

选中时,
doClickMeButton
函数事件是鼠标事件,鼠标事件没有键盘绑定详细信息。
您可以根据
输入
标记绑定基于键盘的事件。 我已经提到了下面的代码,它的行为与您想要的相同

函数doClickMeButton(){
警惕(“我被叫”);
}
函数doMoreLess(_id){
警报(“单击”+_id);
返回false;
}
函数myFunction(事件){
var x=event.which | | event.keyCode;
如果(x==13){
console.log(event.which,“which”)、console.log(event.keyCode,“keyCode”);
doClickMeButton();
}
}

//首先我不知道你为什么需要这个按钮
点击我

在下面的输入文本框中输入一些内容,然后按Enter键并注意:
(1) 键代码未定义,并且
(2) ENTER激发第一个元素的onclick操作,其中包含onclick。
较少的 更多
您的问题是表单中的按钮类型默认为“提交”按钮(请参阅),并且当表单隐式提交时(当您在输入字段中按
ENTER
时,表单中的第一个
“提交”
按钮也会触发其
onclick
事件处理程序(请参阅)。将按钮更改为具有
type=“button”
可解决此问题:

函数b1Less(\u id,\u事件){
_val=parseInt(document.getElementById('q1').value);
_val=_val-1;
document.getElementById('q1')。值=_val;
返回false;
}
函数b1More(\u id,\u事件){
_val=parseInt(document.getElementById('q1').value);
_val=_val+1;
document.getElementById('q1')。值=_val;
返回false;
}
函数b2Less(_id,_事件){
_val=parseInt(document.getElementById('q2').value);
_val=_val-1;
document.getElementById('q2')。value=\u val;
返回false;
}
函数b2More(_id,_事件){
_val=parseInt(document.getElementById('q2').value);
_val=_val+1;
document.getElementById('q2')。value=\u val;
返回false;
}

数量1:更少
更多

数量2:更少 更多
为什么希望在
单击事件上定义
keyCode
?尝试添加
onkeyup=“doClickMeButton(事件,this.id)”
到您的
输入
,您将看到keyCode值…@jsherk我已经上传了答案,您可以查看,只是好奇为什么会出现“单击我”按钮,您尝试使用什么功能achieve@Adityatoke我刚刚重新创建了新的演示代码,更好地显示了我遇到的问题。我删除了“单击我”按钮。@Nick回车键causes onclick to fire,但没有keyCode属性来确定它是通过鼠标单击还是ENTER键触发的。我已创建了新的演示代码以更好地显示问题。@jsherk您可以检查我的答案,并告诉我它是否解决了您的问题
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;
}