2011-11-15 47 views
0

我试图阻止表单提交,如果用户已经专注于任何提交按钮或输入类型文本(如在过滤数据网格中)。提交按钮和输入关键问题

我考虑2个选项

  • 更换某种<p onclick='submitform&parameters'>Add</p>
  • 块上的按钮输入键和一些优选的输入字段

是否有更好的方式提交按钮做这个?

+2

为什么?人们期望输入密钥来提交表单,特别是当按钮集中时。 你是否将其他行为附加到按钮上? – Patricia

+0

你有一个点,但我想明确地阻止这个在一些页面 –

+0

正确的关键字组合揭示不错的链接到相同的问题:(http://stackoverflow.com/questions/1567644/submit-form-problem-输入密钥,将回复,如果有帮助 –

回答

0

解决方案

input id="txt" type="text" onKeyPress="if (event.which == 13) return false;"></input> 

链接

http://stackoverflow.com/questions/1567644/submit-form-problem-enter-key 

问题已关闭

2

如果添加onKeyPress事件有关的元素,你可以通过返回防止默认动作(表单提交)虚假的功能:

<input id="txt" type="text" onKeyPress="var key = event.keyCode || event.which; if (key == 13) return false;"></input> 

请注意,不推荐使用键盘事件的which属性,但仍需要检查它是否支持较早的用户代理和/或Internet爆炸程序(reference)。

如果您不想使用内嵌JavaScript(不推荐),您可以改为附加一个事件。此外,最好使用事件对象的方法preventDefaultdocs)以及stopPropagation方法(docs) - 这些方法的必要性高度依赖于您附加到窗体或其他事件的其他事件元素:

var preventFormSubmit = function (event) { 
    var key = event.keyCode || event.which; 
    if (key != 13) 
     return; 
    if (event.stopPropagation) event.stopPropagation(); 
    else event.cancelBubble = true; // deprecated, for older IE 
    if (event.preventDefault) event.preventDefault(); 
    else event.returnValue = false; // deprecated, for older IE 
    return false; 
}; 
var target = document.getElementById('txt'); 
if (typeof target.addEventListener == 'function') 
    target.addEventListener('keypress', preventFormSubmit, false); 
else if (typeof target.attachEvent == 'function') 
    target.attachEvent('onkeypress', preventFormSubmit); 

还有其它的方法来使用,比如安装一个更复杂的onSumit处理程序窗体本身 - 如果你打算做形式或数据之前的进一步处理,这可能是更合适提交(或使用AJAX提交表单数据)。

+0

很好的解释,但是这个修复的范围仅仅是针对IE7 +,FF和Chrome,对于一个Intranet网站来说,这个修复是令人满意的,对于更高级的东西,我看到你的观点并感谢你分享你的想法 –