Javascript JSF:按下enter键时如何提交表单?

Javascript JSF:按下enter键时如何提交表单?,javascript,jsf,Javascript,Jsf,这似乎是一个简单的要求,但我还没有找到一个简单的解决方案: 在JSF1.2/Richfaces 3.3 Web应用程序中,我有一个表单,表单中有各种类型的输入组件,后跟一个和一个。前者重置表单,后者使用输入的数据执行某些操作 我的目标是在用户输入数据时按下enter键时触发此操作。我该怎么做 编辑:通常,每个我有多个。我想指定一个特定的操作作为默认操作。另外,我希望解决方案能够很好地使用AJAX(我们广泛使用AJAX)。除非您使用的是MSIE浏览器,而且实际上您只有一个没有按钮的输入字段,否则它

这似乎是一个简单的要求,但我还没有找到一个简单的解决方案:

在JSF1.2/Richfaces 3.3 Web应用程序中,我有一个表单,表单中有各种类型的输入组件,后跟一个
和一个
。前者重置表单,后者使用输入的数据执行某些操作

我的目标是在用户输入数据时按下enter键时触发此操作。我该怎么做


编辑:通常,每个
我有多个
。我想指定一个特定的操作作为默认操作。另外,我希望解决方案能够很好地使用AJAX(我们广泛使用AJAX)。

除非您使用的是MSIE浏览器,而且实际上您只有一个没有按钮的输入字段,否则它应该只是默认行为。否则可能是一些(自动生成的)JS代码把它搞糟了

如果表单中没有文本区域,可以通过以下方法轻松修复:

<h:form onkeypress="if (event.keyCode == 13) submit();">

基于BalusC的回答,我得出了以下结论(在IE和FireFox上测试):


编辑:由于使用enter键从Firefox form auto completion中选择一个值会触发keydown事件,但不会触发keypress事件,因此使用onkeypress比onkeydown更可取。

只需将此代码放入JS文件中:

$('input,textarea').live('keydown',function(e) { // submit forms on pressing enter while focus is on any input elmnt inside form
    if (e.keyCode == 13) {
        $(this).closest('form').submit();
    }
});

回想起来,用HTML提供的方法解决这个问题远没有那么脆弱,也更容易维护,以下相关问题的答案显示了这一点:


使用PrimeFaces组件:

<!-- Default button when pressing enter -->
<p:defaultCommand target="submit"/>

将其与焦点组件结合使用,您将摇滚

<!-- Focus on first field, or first field with error -->
<p:focus context="feesboek"/>


恐怕我忘了提到一些限制条件(c.f.我编辑的问题)。我不能依赖于只有一个提交按钮(如果焦点在另一个按钮上,我肯定不想截取按键),我们使用的是AJAX风格的部分呈现,这将从输入控件中删除事件侦听器,不是吗?尽管如此,这是一个很好的起点,所以请大家投票:-)这需要jQuery,这是OP没有提到的。另外,我说过它需要使用AJAX,它用AJAX响应替换部分DOM。这将删除jQuery注册的所有事件处理程序。此外,当用户希望在文本区域中输入换行符时,您的解决方案将提交表单。。。
$('input,textarea').live('keydown',function(e) { // submit forms on pressing enter while focus is on any input elmnt inside form
    if (e.keyCode == 13) {
        $(this).closest('form').submit();
    }
});
<!-- Default button when pressing enter -->
<p:defaultCommand target="submit"/>
<!-- Focus on first field, or first field with error -->
<p:focus context="feesboek"/>