6

我知道以前有人问过类似的问题,但我看到的行为与我在 SO 上找到的行为有点不同。

我有一个表格,我将其分解为几个 jquery 手风琴选项卡。我希望用户能够填写选项卡 1 下的文本字段,然后按下选项卡键以自动打开选项卡 2 并将焦点放在该选项卡中的文本字段上。我遇到的问题是阻止 Chrome 中的默认选项卡按键行为。

$("form#new_story").keydown(function (e) {
    if(!e) var e = window.event;
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 9) {
        e.preventDefault();
        alert("tab was keyed");
    }
});

我已经在 Chrome、FF 和 Safari 中对此进行了测试。在 FF 和 Safari 中运行良好,但是当使用 Chrome 的用户按下 tab 键时,实际的选项卡会在事件触发之前输入到文本字段中。我想停止这种行为,但是在事件触发之前显然已经输入了选项卡。有没有办法阻止这种情况?

4

1 回答 1

1

原来问题是由 jquery validate 触发的。我正在使用这组选项验证表单中的每个文本字段:

$("form#new_story").validate({
                      ignore: [],
                      onkeyup: false,  //stop eager validation of fields so to not hit server each time user clicks a key in the email field
                      onfocusout: true,
                      ...
                    };

一旦我设置onfocusout: false,我就能够按预期捕获 tab keydown 事件。

我不知道为什么会这样。必须是 jquery 手风琴或 jquery validate 中的错误。

于 2013-05-16T17:37:49.593 回答