我正在修复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>
按下回车键两个功能都被称为
答案 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可以测试这个,但考虑到以下链接,它可能会起作用:
答案 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即可。