处理用户在ASP.NET MVC网站中点击“Enter”键

我正在使用具有多个提交按钮的ASP.NET MVC网站。 即

   

我需要允许用户通过按“Enter”键快速提交表单。 HTML标准似乎指定如果用户按下“Enter”键,将假定第一个提交按钮。 但是,我需要将第二个按钮(即“确定”)按钮设为默认按钮,并且由于我甚至不想谈论的原因,更改按钮顺序不是一个选项。

我google了一下,我发现这篇文章关于在ASP.NET中使用Page.Form.DefaultButton,但这不适用于ASP.NET MVC。

我也尝试了以下javascript解决方案,虽然它在Chrome中有效但在IE6中不起作用

  $('body').keypress(function(e) { if (e.which === 13) { $("input[value='OK']").trigger('click'); } }); 

我可以想到一些非常极端的解决方案,例如通过表单中的每个控件将上述函数附加到它们上面。 但是,我不认为这是一个非常简洁的解决方案,所以我想知道有没有人有更好的解决方案?

首先,这是错误的:

    

所有这三个都是提交按钮。 复位是type =“reset”的输入。 得到那个排序。 其次,我已经成功实现了类似的东西,它适用于IE6。 试试这个:

  function keypressHandler(e) { if(e.which == 13) { e.preventDefault(); //stops default action: submitting form $(this).blur(); $('#SubmitButton').focus().click();//give your submit an ID } } $('#myForm').keypress(keypressHandler); 

当用户按下回车键时,focus()部分会使按钮显示为按下。 相当漂亮。

用这个。

 $(function(){ $('input').keydown(function(e){ if (e.keyCode == 13) { $("input[value='OK']").focus().click(); return false; } }); }); 

你应该只有一个提交按钮。 重置按钮应该是type="reset" ,后退按钮应该是type="button"如下所示:

    

然后,重置和确定将按照它们应该的方式工作,您只需要使用Javascript处理后退按钮单击。

编辑:另一个选项是将重置和返回提交按钮分别放在iframe中各自的表单中。 然后它们将被主窗体忽略,并且不会是默认按钮。 此外,如果需要,这将允许您将它们指向不同的服务器操作,并且不会依赖于Javascript来执行按钮操作。

由于你使用jquery,如果你使用热键插件 ,你可以采用这样的方法:

 $(document).bind('keydown', 'return', function (evt){ $.next("input[value='OK']").trigger("click"); return false; }); 

HTML标准似乎指定如果用户按下“Enter”键,将假定第一个提交按钮。

不,没有定义enter键的用法,它是一个在各种解释下添加的propritary扩展。 您将在不同的浏览器中获得不同的行为(当您开始混合不同的文化或UI约定时,从左到右/从右到左排序选项会变得非常危险)。

如果表单上只有一个按钮,那么所有主流浏览器都会遵循相同的行为 – 他们提交表单就好像按下了该按钮一样(表单数据中包含了buttonName = buttonValue)。 当然,这并不意味着按钮onclick处理程序将会触发 – 该行为是特定于浏览器的。

当有几个按钮时,这是一个完整的垃圾拍摄。 一些浏览器决定第一个按钮(和第一个按钮的定义可以变化 – 大多数使用Html树中提到的第一个按钮,而其他人尝试使用屏幕位置)被点击并在提交中使用它,而其他浏览器(特别是一些) IE的版本做出同样正确的假设, 没有按下特定按钮 ,因此不包括buttonName = buttonValue(表单的其余部分提交正常)。

更改源中的按钮顺序但不能直观(即使用CSS交换按钮)?