如何防止ENTER按键在基于Web的应用程序中提交表单?
[ 2012年修订版,没有内联处理程序,保留textarea输入处理]
function checkEnter(e){ e = e || event; var txtArea = /textarea/i.test((e.target || e.srcElement).tagName); return txtArea || (e.keyCode || e.which || e.charCode || 0) !== 13; }
现在,您可以在表单上定义一个按键处理程序:
document.querySelector('form').onkeypress = checkEnter;
这是一个jQuery处理程序,可用于停止输入提交,还可以停止退格键 - >返回."keyStop"对象中的(keyCode:selectorString)对用于匹配不应触发其默认操作的节点.
请记住,网络应该是一个可访问的地方,这打破了键盘用户的期望.也就是说,在我的情况下,我正在处理的Web应用程序无论如何都不喜欢后退按钮,因此禁用其关键快捷键就可以了."应该进入 - >提交"讨论很重要,但与实际问题无关.
以下是代码,由您来考虑可访问性以及您实际想要执行此操作的原因!
$(function(){ var keyStop = { 8: ":not(input:text, textarea, input:file, input:password)", // stop backspace = back 13: "input:text, input:password", // stop enter = submit end: null }; $(document).bind("keydown", function(event){ var selector = keyStop[event.which]; if(selector !== undefined && $(event.target).is(selector)) { event.preventDefault(); //stop event } return true; }); });
只需从onsubmit处理程序返回false
而已。按键操作将由浏览器/ fields / etc等照常处理。如果触发了“输入-提交”逻辑,则浏览器将找到该隐藏的“提交”按钮并将其触发。然后javascript处理程序将阻止该细分。
我花了一些时间为IE8,9,10,Opera 9 +,Firefox 23,Safari(PC)和Safari(MAC)制作这个跨浏览器
JSFiddle示例: http ://jsfiddle.net/greatbigmassive/ZyeHe/
基本代码 - 通过附加到表单的"onkeypress"调用此函数,并将"window.event"传递给它.
function stopEnterSubmitting(e) { if (e.keyCode == 13) { var src = e.srcElement || e.target; if (src.tagName.toLowerCase() != "textarea") { if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; } } } }