2011-04-04 105 views
5

我有一个与众不同的形式相关的问题。我的网络应用程序侦听来自条形码阅读器的扫描器输入。条形码阅读器表现为下面的格式键盘输入:停止换行提交表单?

~100.0101~\n 

其中\n是一个换行符。我使用一个带有正则表达式的全局JavaScript侦听器 - 只要侦听器听到与正则表达式匹配的输入,我就会调用我的barcodeHandler()函数。

不幸的是,这与表单不能很好地交互:如果用户在扫描时将注意力集中在表单输入上,表单会在侦听器启动前提交并回发,因为表单需要\n来表示“submit ”。

我无法更改扫描仪输入,那么有什么办法可以阻止输入\n时提交的表单吗?

显然,我仍然喜欢我的表单使用Enter键,并且我宁愿不改变默认表单行为!

非常感谢!

+1

你可以使用jQuery和关键行动分配一个特殊的功能,做event.preventdefault();以防止将“输入”键作为表单提交进行处理。 – ITroubs 2011-04-04 12:49:49

+0

谢谢 - 尽管我非常喜欢Enter键仍然可以工作 - 只是不是条码扫描器提供的'\ n'。有没有办法区分两者? – AP257 2011-04-04 13:03:16

+0

啊,我可以在匹配正则表达式的第一部分时应用事件侦听器。这样可行。 – AP257 2011-04-04 13:24:55

回答

8

您需要捕捉的形式控制按键和防止使用preventDefault()return false的默认操作。

// do this for all <input> <textarea> and <select> elements on the page. 
input.addEventListener("keypress", function(event){ 
    if (event.which == '10' || event.which == '13') { 
     event.preventDefault(); 
    } 
}, false); 

或使用jQuery:

$("input, textarea, select").keypress(function(event){ 
    if (event.which == '10' || event.which == '13') { 
     event.preventDefault(); 
    } 
}); 
+1

工程就像一个魅力!我这样使用:'$(“:input”).presspress(// code)'因为我想在所有输入中捕获它。谢谢。 +1 – 2011-10-26 22:17:36

3

覆盖表单的onsubmit并提供您自己的替代方案作为提交按钮上的onclick处理程序。

<form action="submit.php" onsubmit="return false;"> 
    Some input ...<input type="text"/> 
    <input type="button" value="Submit" onclick="parentNode.submit();"> 
</form>