2010-01-10 82 views
3

我有一个表单,其中onkeyup触发某些字段的建议框的创建。我可以捕获向上箭头,向下箭头和逃逸的击键,并相应地使用它们在建议框中移动或关闭它。我想用enter将它们的选择移到触发建议的输入字段中。但是,我似乎无法捕获输入按键。可能阻止输入从仅在某些输入字段提交表单输入

控件永远不会进入我的JavaScript提示功能。而是表单简单地提交。我试过noEnter函数返回false时输入传入onkeypress和onkeydown问题的输入元素,没有骰子。该表单似乎从所有输入事件处理程序中获取控件,并在其中的任何一个可以执行任何操作之前提交自己。

表单提交是否覆盖字段中的所有其他事件处理程序,或者是否还有其他内容正在执行?如果是这样,有没有办法解决这个问题?

这里是有问题的元素(一些值去掉):

<input type="text" name="myInput" id="myInputField" size="22" onkeypress="noEnter(event)" onkeyup="suggest(event)" onblur="hideSuggestions()"> 

而这里的javascript来抓住它:

var evnt = (event ? event : window.event); 

    var key = evnt.keyCode; 

    if(key == 13) { // Handle Enter 
     alert("ENTER PRESSED."); 
     hideSuggestions(); 
     return false; 
    } 

警报永远不会触发。警报放在函数的顶部也不会触发。然而,对于退出键,当我将完全相同的代码放入时,如果检查key == 27,则会触发警报。

有几乎同一主题的其他问题,比如这一个:Prevent Users from submitting form by hitting enter #2

不过,我没有使用jQuery和我只是想阻止提交了这一领域的进入。但是,在各种问题中提到的其他解决方案似乎都行不通。

EDITTED:解释密钥设置的位置。

+0

什么是 '关键'在你的代码?我试图理解你的其他功能 - 也许尝试做alert(key),看看这个函数是否实际上被调用,以及'key'的值是什么 – Roman 2010-01-10 18:04:55

+0

尝试过提醒,函数根本没有被调用 - 更不用说关键了。 – 2010-01-10 18:11:22

回答

11

尝试输入改变onkeyup事件返回函数结果

所以在onkeypress事件事件:

<input type="text" name="myInput" id="myInputField" size="22" onkeypress="return dontSubmit(event);" /> 

,然后JS:

function dontSubmit (event) 
{ 
    if (event.keyCode == 13) { 
     return false; 
    } 
} 
+0

好!这样做了,谢谢! – 2010-01-10 18:14:15

+0

为我工作,虽然我也似乎需要onsubmit =“返回false”在窗体标记。 – 2013-07-16 01:46:16

+0

@HighlyIrregular这个答案对我来说也不起作用,但是你的建议禁用了*对于整个表单的任何一种提交(甚至用鼠标点击提交按钮)。 – starsplusplus 2015-04-07 14:36:19