第一次按下回车键时如何停止具有要触发的第一个 onclick 事件的元素

2023-12-11

我正在修复 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>

按 Enter 键后,两个函数都会被调用。


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

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();
  }
}

但您必须记住,如果您在整个页面上阻止默认输入,它将阻止它在文本区域和其他可能使用输入的地方工作。如果这是一个问题,您可以根据以下情况决定是否阻止默认操作:

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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第一次按下回车键时如何停止具有要触发的第一个 onclick 事件的元素 的相关文章

随机推荐