如何捕获包含多个表单的页面上按下的输入键?

我inheritance了一个Web应用程序,其中通常在任何输入字段中按返回的能力已被禁用,原因很简单,该页面包含多个表单,并且应用程序无法确定(或者,我被告知哪种forms行动起来。 应用程序的设计是因为没有提交按钮(如输入类型=“提交”),相反,设计人员已经进行了onclick处理。 以下是在其中一个页面上定义的两个按钮,包括在内

"  

但我真的希望能够允许用户按下返回,如果他们愿意,例如他们只是输入与LOGIN相关联的字段,然后检测并执行onclick =“submit();”

也许有一个jQuery的解决方案。

页面包含多个表单,并且应用程序无法确定(或者,我被告知)要采取哪种forms的行动。

当您在输入控件上按Enter键时,浏览器将在该表单中搜索第一个提交按钮并模拟其上的单击。 在多个按钮的情况下,第一个按钮将被按下键盘输入(这绝不是一成不变的,浏览器可能会偏离此按钮)。

如果您有两个表单,那么获得按键的表单将按下第一个提交按钮。 因此,您并不需要对此进行任何特殊处理。 你只需要停止阻碍。

您可以在表单上的代码中模拟这个:

  $( 'form' ).bind('keypress', function(e){ if ( e.keyCode == 13 ) { $( this ).find( 'input[type=submit]:first' ).click(); } }); 

或窗口(用于演示大致发生的事情):

  $( window ).bind('keypress', function(e){ if ( $( e.originalTarget ).is( ':input' ) && e.keyCode == 13 ) { $( e.originalTarget ) .closest( 'form' ) .find( 'input[type=submit]:first' ) .click(); } }); 

当然假设没有在事件上调用.preventDefault()

底线:如果你有这个事件,你可以从中找出它来自哪个元素,以及它所属的forms。 即使在这种情况下:

  

这里的submit()是一个全局函数,但是当它被调用时,它的上下文( this )将是元素,你可以submit(e){ this.form.submit(); } submit(e){ this.form.submit(); }

应用程序的设计是因为没有提交按钮(如输入类型=“提交”),相反,设计人员已经进行了onclick处理。

这听起来像设计师没有完全理解DOM /表单事件,并且在很长一段时间内解决了这个问题。 另一个可能的原因可能是该程序已经过时,并且在这些事情不像今天那样稳定或正确记录的情况下进行设计。

替换这个:

 
[...]

有了这个:

 
[...]

然后为需要它的所有表单添加一个键处理程序,如果满足某些条件,则检测并抑制输入(对于实际上确实要禁用此表单的表单)。

 // for all forms that POST that have 2+ submit buttons $( 'form[method=post]:has(:submit:eq(1))' ).bind('keydown', function(e){ // if target is an enter key, input element, and not a button if ( e.keyCode == 13 && e.target.tagName == 'INPUT' && !/^(button|reset|submit)$/i.test( e.target.type ) ) { return false; // kill event } }); 

或者更好的是:使用知道如何为您执行此操作的表单validation库(或jQuery插件)。

您可以在jquery中为Enter键绑定按键事件:

 $("form").bind("keypress", function(e) { if (e.keyCode == 13) { your_custom_submit_function(); return false; // ignore the default event } }); 

手指越过这个工作

 $(document).ready(function() { var focussed_form; $('input').focus(focus_form); $('input').blur(unfocus_form); $('textarea').focus(focus_form); $('textarea').blur(unfocus_form); $('select').focus(focus_form); $('select').blur(unfocus_form); $(document).keypress(function(e) { if(e.keyCode == 13) { $(focussed_form).trigger('submit'); } }); function focus_form(){ focussed_form = $(this).closest('form'); } function unfocus_form(){ focussed_form = NULL; } }); 

我认为你不需要jQuery或javascript。 您确实可以检测用户点击提交的表单,甚至可以检测哪个表单被点击(如果每个表单有多个提交按钮)。

这是你要使用的代码:

 

然后,对于表单处理脚本,您只需检查提交按钮的名称,例如:

 if (isset($_POST['action1a'])) ... // PHP syntax 

或者,您可以使用图像作为提交按钮,然后您可以对所有提交按钮使用相同的名称,只需检查它们的值 – 如果每个按钮都具有唯一value属性,您也可以使用常规提交按钮执行此操作。


编辑:另一种方法是组合POST和GET值,即: