如何在第一次按下回车键时触发第一个onclick事件的元素

时间:2013-10-03 06:40:49

标签: javascript html javascript-events

我正在修复jsp页面中的一个错误,其中即使用onkeypress事件定义了一个函数,当第一次打开页面时,单击一个特定的按钮(实际上是一个带有与之关联的onclick属性的按钮图像)然后输入键按下它抛出一个错误。 当我调试代码时,我发现实际上两个调用是同时进行的,即点击第一个带onclick属性的按钮。

这是一个示例代码

<html>
<head>
</head>
<body>
<div onkeypress =handleEnter()>
name <input  type="text" src='Create.gif' >
</br>
<input  type="image" src='Create.gif' onclick="alert('not done')">
<input  type="image" src='Create.gif' onclick="alert('done')">
</div>
</body>
<script>
function handleEnter()
{
if(window.event.keyCode==13)
{
alert('nothing');
event.cancelBubble=true;
}
}
</script>
</html>
按下回车键

两个功能都被称为

2 个答案:

答案 0 :(得分:3)

以下内容可能会奏效。通过阻止按键的默认操作,它应该阻止浏览器触发标准的“表单提交” - 这就是我认为正在发生的事情。

function handleEnter(e)
{
  e || (e = window.event); /// support for both ie and non-ie browsers
  if(e.keyCode==13)
  {
    alert('nothing');
    // old ie support
    e.cancelBubble = true;
    e.returnValue = false;
    // non-ie
    e.preventDefault && e.preventDefault();
    e.stopPropagation && e.stopPropagation();
  }
}

你必须记住,如果你要阻止整个页面上的输入默认,它将停止它适用于textareas和其他可能使用输入的地方。如果这是一个问题,您可以根据以下内容决定是否阻止默认操作:

var elm = e.srcElement || e.target;

elm应该包含事件的触发元素。 scrElement适用于旧IE,target适用于非IE浏览器。例如,您可以使用此方法在达到防止默认值之前使代码短路。

if ( elm.nodeName == 'textarea' ) return;

我没有IE8可以测试这个,但考虑到以下链接,它可能会起作用:

http://support.microsoft.com/kb/298498

答案 1 :(得分:0)

我知道这是一个老问题,但是我没有找到其他任何问题/答案,并且我也遇到了同样的问题和按钮。

但是由于某些原因,当我查看传递给javascript函数的“事件”时,没有传递任何keyCode,因此我无法区分按下了哪个键。仅供参考,“事件”仅传递了isTrusted属性(没有其他内容),但这是另一个问题……

我的解决方案是,我只在所有其他元素之前添加了一个带有onclick="return false;"style="display:none;"的按钮,以便ENTER键影响该元素,并且实际上被忽略,并且不可见。使用onclick ='return false;'该表格将不会提交。使用onclick ='return true;'时表格将被提交。

<button id='prevent-onclick-on-enter' style='display:none;' onclick='return false;'/>
<input  type="image" src='Create.gif' onclick="alert('not done')">
<input  type="image" src='Create.gif' onclick="alert('done')">

第二答案 因此,这可能是针对一个仅涉及按钮(不涉及输入)的稍微不同的问题,但是对于某些不知道这一点的人(例如我),这可能是个好消息…… 当您在表单中有一个按钮时,默认情况下键入“提交”,这意味着表单中的第一个按钮将具有由ENTER键触发的onclick事件。为了防止这种情况的发生,只需在按钮上输入type =“ button”,然后再输入key即可。