如何停止在第一次按下回车键时触发第一个 onclick 事件的元素
How to stop element with first onclick event to be fired when enter key is pressed first time
我正在修复 jsp 页面中的一个错误,在该页面中,即使使用onkeypress
事件定义了一个函数来单击特定按钮(实际上是带有与之关联的onclick
属性的按钮的图像(,当页面第一次打开然后按下 Enter 键时,它会抛出错误。
当我调试代码时,我发现实际上同时进行了两个调用。 即,带有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>
按回车键时,两个函数都被调用。
以下方法可能会起作用。通过阻止按键的默认操作,它应该阻止浏览器触发标准的"表单提交"——这就是我认为正在发生的事情。
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();
}
}
但您必须记住,如果您在整个页面上阻止默认输入,它将停止它适用于文本区域和其他可能使用 enter 的地方。如果这是一个问题,您可以决定是否阻止默认操作,具体取决于:
var elm = e.srcElement || e.target;
elm
应包含事件的触发元素。 scrElement
适用于旧IE,target
适用于非IE浏览器。例如,您可以使用它在达到 prevent 默认值之前缩短代码。
if ( elm.nodeName == 'textarea' ) return;
但是,我没有IE8来测试这一点,但是考虑到以下链接,它可能会起作用:
http://support.microsoft.com/kb/298498
我知道这是一个老问题,但我没有找到任何其他问题/答案,而且我在按钮上遇到了同样的问题。
但是由于某种原因,当我查看传递给javascript函数的"事件"时,没有随之传入的keyCode,因此我无法区分按下了哪个键。仅供参考,"事件"只是传入是受信任的属性(仅此而已(,但这是另一个问题......
我的解决方案是,我只是在所有其他元素的前面添加了一个带有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 事件。为了防止这种情况发生,只需将 assigm type="button" 添加到按钮上,回车键将不再影响它。
Jsherk所提到的,任何意外的onclick都应该有type="button",并且在按下回车键时将停止触发
- 而循环只设置php中输入字段中的第一个值
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- IE11中的第二个调用取消了第一个Fetch API调用
- Javascript XMLHttpRequest——只有第一个POST请求有效
- 使用javascript或angularjs特定过滤器搜索字符串中第一个img标记的json值
- 将OnClick函数设置为<ul>,最后一个ul是擦除第一个ul-s
- RxJS油门行为;立即获取第一个值
- Angular UI网格:如何通过第一个UI网格中的按钮使第二个UI网格可见
- 选择多个实例中的第一个
- 如何在一个onclick按钮上使用一个javascript函数选择多个文本字段
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- 如何通过一个onclick事件更改两个单独的图像
- Lodash:返回对象的第一个键,该对象的值(即数组)中有一个给定的元素(即字符串)
- 看起来第一个console.log是'It’不太对
- 与杜兰达尔合作的第一个JavaScript项目.尝试从第三方 API 获取数据
- 节点发布错误对象的第一个“属性”
- Javascript:表单验证getElementById仅返回第一个id元素
- 仅将 CSS 规则应用于
中的第一个 ,而不分配类/ID - 如何停止在第一次按下回车键时触发第一个 onclick 事件的元素
- 如何为Onclick访问已单击TR的第一个TD