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

时间:2009-06-24 22:00:49

标签: asp.net javascript jquery asp.net-mvc

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

    <input type="submit" name="SubmitButton" value="Reset" />
    <input type="submit" name="SubmitButton" value="OK" />
    <input type="submit" name="SubmitButton" value="Back" />

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

我搜索了一下,我发现this post关于在ASP.NET中使用Page.Form.DefaultButton,但这不适用于ASP.NET MVC。

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

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

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

6 个答案:

答案 0 :(得分:35)

首先,这是错误的:

<input type="submit" name="SubmitButton" value="Reset" />
<input type="submit" name="SubmitButton" value="OK" />
<input type="submit" name="SubmitButton" value="Back" />

这三个都是提交按钮。复位是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()部分会使按钮显示为按下。相当漂亮。

答案 1 :(得分:10)

使用此功能。

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

答案 2 :(得分:4)

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

<input type="reset" name="ResetButton" value="Reset" />
<input type="submit" name="SubmitButton" value="OK" />
<input type="button" name="BackButton" value="Back" />

然后,重置和确定将按照预期的方式工作,您只需要使用Javascript处理后退按钮。

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

答案 3 :(得分:3)

由于你使用jquery,如果使用hotkeys plugin,你可以采用这种方法:

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

答案 4 :(得分:3)

  

HTML标准似乎指明了这一点   第一个提交按钮将是   假设用户按下'Enter'   键。

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

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

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

答案 5 :(得分:0)

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