将Enter从提交更改为Tab?

Aar*_*nLS 12 javascript asp.net

用户不喜欢Enter键提交页面的事实.所以我的任务是阻止提交并将Enter键更改为Tab到下一个字段.

我已经尝试了很多在网上找到的javascript片段,但到目前为止还没有.唯一一个甚至接近产生影响的是jQuery API的e.preventDefault(),它停止了提交,但我尝试过的任何东西都不会模拟选项卡行为.

e.returnValue = false;
e.cancel = true;
Run Code Online (Sandbox Code Playgroud)

页面仍然在keydown事件处理程序中提交以上内容.与return falsekeydown事件处理程序中的效果相同.处理程序正在触发,通过在其中放置一个带有firebug的断点进行测试.

这需要适用于IE和Firefox.

不要说"不要这样做".
1)我已经确信我不应该这样做,但这不是我的选择,所以讨论是静音的.
2)这将是"我应该这样做吗?"这个问题的答案,这不是我要问的问题.

And*_*ker 11

这只是感觉很蠢,但你可以event.preventDefault像你提到的那样使用,然后调用focus()下一个最接近的输入:

这是一个简单的例子:

$("input").bind("keydown", function(event) {
    if (event.which === 13) {
        event.stopPropagation();
        event.preventDefault();
        $(this).next("input").focus();
    }
});
Run Code Online (Sandbox Code Playgroud)

示例:http://jsfiddle.net/andrewwhitaker/Txg65/

更新:如果输入之间有元素,则使用plain next()将无效.相反,使用nextAll():

$("input").bind("keydown", function(event) {
    if (event.which === 13) {
        event.stopPropagation();
        event.preventDefault();
        $(this).nextAll("input").eq(0).focus();
    }
});
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/andrewwhitaker/GRtQY/