在Chrome中的textarea中单击Tab键时,使用preventDefault()

chu*_*k w 6 javascript jquery google-chrome

我知道之前已经提出了类似的问题,但我看到的行为与我在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");
    }
});
Run Code Online (Sandbox Code Playgroud)

我在Chrome,FF和Safari中测试了这个.在FF和Safari中运行良好,但是当使用Chrome键的用户按下Tab键时,在事件触发之前会在文本字段中输入实际的选项卡.我想停止这种行为,但是在事件触发之前显然正在输入标签.有办法阻止这个吗?

chu*_*k w 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,
                      ...
                    };
Run Code Online (Sandbox Code Playgroud)

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

我不知道为什么会这样。一定是 jquery Accordion 或 jquery validate 中的错误。