当在Chrome的文本区域内单击选项卡键时,preventDefault()

preventDefault() when a tab key is clicked inside of a textarea in Chrome

本文关键字:preventDefault 选项 Chrome 文本 区域 单击 当在      更新时间:2023-09-26

我知道以前也有人问过类似的问题,但是我看到的行为与我在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的用户按下标签键时,在事件触发之前,一个实际的标签被输入到文本字段中。我想停止这种行为,但标签显然是被输入事件甚至触发之前。有办法阻止这一切吗?

原来这个问题是由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键下事件。

我不知道为什么会这样。一定是jquery手风琴或jquery验证中的错误。