Javascript 是否将输入从提交更改为选项卡?

Javascript 是否将输入从提交更改为选项卡?,javascript,asp.net,Javascript,Asp.net,用户不喜欢Enter键提交页面这一事实。因此,我的任务是阻止提交,并将Enter键更改为下一个字段的选项卡 我尝试了许多在网上找到的javascript代码片段,但到目前为止都没有成功。只有jQueryAPI的e.preventDefault()能起到作用,它会停止提交,但我没有尝试过模拟选项卡行为 e.returnValue = false; e.cancel = true; 页面仍然在keydown事件处理程序中提交上述内容。与keydown事件处理程序中的返回false的效果相同。处理程

用户不喜欢Enter键提交页面这一事实。因此,我的任务是阻止提交,并将Enter键更改为下一个字段的选项卡

我尝试了许多在网上找到的javascript代码片段,但到目前为止都没有成功。只有jQueryAPI的e.preventDefault()能起到作用,它会停止提交,但我没有尝试过模拟选项卡行为

e.returnValue = false;
e.cancel = true;
页面仍然在keydown事件处理程序中提交上述内容。与keydown事件处理程序中的
返回false的效果相同。处理程序正在启动,通过使用firebug在其中放置断点进行测试

这需要与IE和Firefox一起使用

不要说“不要这样做”。
1) 我已经确信我不应该这样做,但这不是我的选择,因此讨论是沉默的。

2) 这将是对“我应该这样做吗?”问题的回答,这不是我要问的问题。

这感觉很恶心,但您可以使用您提到的
事件.preventDefault
,然后对下一个最近的输入调用
focus()

下面是一个简单的例子:

$("input").bind("keydown", function(event) {
    if (event.which === 13) {
        event.stopPropagation();
        event.preventDefault();
        $(this).next("input").focus();
    }
});
例如:

更新:如果在输入之间有元素,则使用普通的
next()
将不起作用。相反,请使用
nextAll()

根据这篇文章:

我想到了这个。不过,我最终选择了不使用焦点,而是使用输入来获得我想要的效果。
.not
是为了防止图像按钮和提交按钮受到影响,这样它们在有焦点时仍然具有默认的回车提交操作

$(document).ready(function() {
var focusables = $(":input").not('[type="image"]').not('[type="submit"]');

  focusables.keydown(function(e) {
    if (e.keyCode == 13) {
      e.preventDefault();
      var current = focusables.index(this),
              next = focusables.eq(current + 1).length ? focusables.eq(current + 1) : focusables.eq(0);
      next.focus();
    }
  });
});

为什么不使用
e.preventDefault()
停止提交,然后使用其他方法转移焦点?毕竟,您可以将多个操作放入事件处理程序中。确定当前有焦点的元素应该相对容易。因此,下一步应该关注哪些元素。然后您可以手动设置该元素的焦点。每隔一段时间,我就会有一位客户要求这样做。我总是指出,很少有网站这样做的原因很简单:这是意外的行为。甚至谷歌也接受enter键作为表单提交。我再也没有人问过我了。@waxolanist&@Chris,如果你不能回答他的问题,请什么也别说。我一直站在亚伦的立场上,收到这样的回复真是令人沮丧。此外,一些客户的员工来自“绿屏”环境,他们习惯于在字段之间输入,而不是在选项卡之间输入。web应用程序的要求是保持相同的行为。请查看链接到此。这是一个可重用的插件,名为,使用CSS类或HTML5
data-*
属性来标记您想要的功能所在的字段/表单/容器。此外,对于IE,您需要使用
event.cancelBubble=true
,这样它就不会冒泡(并将表单或选项卡提交给下一个输入)。请参阅。感谢您提供的提示,添加了
event.stopPropagation()
,我相信它将在IE/FF中起作用,因为它是jquery事件对象上的一个函数。+1让我走上了正确的轨道,但我认为不起作用,因为我在输入框之间有东西。以前从未使用过fiddle,但我认为这应该说明了我的意思:虽然我们现在发布了解决方案,但我们还是能够得到解决方案。@AaronLS:好的,我已经扩展了示例以包括该案例,请参考答案。我已经将类似功能添加到jQuery插件中,以防您需要可重用的解决方案。
$("input").bind("keydown", function(event) {

    if (event.which === 13 && this.type !== 'submit') {
        event.preventDefault();
        $(this).next("input").focus();
    }
});
$(document).ready(function() {
var focusables = $(":input").not('[type="image"]').not('[type="submit"]');

  focusables.keydown(function(e) {
    if (e.keyCode == 13) {
      e.preventDefault();
      var current = focusables.index(this),
              next = focusables.eq(current + 1).length ? focusables.eq(current + 1) : focusables.eq(0);
      next.focus();
    }
  });
});