如何捕获包含多个表单的页面上按下的输入键?
我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值,即: