javascript - 使用 keyup 捕获 TAB 键按下

标签 javascript jquery

我需要完成 2 个目标,但我一次完成一个目标,而不是同时完成两个目标。 首先,我有一个输入字段,当按下一个键时应该触发一个事件,我需要捕获该字段值。我使用字母、数字和 TAB 键。因此,如果我使用 keyup,它会在第一个字符处触发。如果我使用 keydown,则需要 2 个字符才能触发,因为当它第一次触发时,字符还没有被按下。因此,当我第二次按下时,它会触发第一个字母,依此类推。

也就是说,很明显我需要的是将值放入字段然后触发事件的 keyup 事件。但 TAB 在我的例子中有特殊含义,它不是默认行为,使用 TAB 键我无法捕获 e.which、e.charCode 或 e.keyCode!只有通过 keydown 我才能获得这些值!

现在我不知道该怎么做。我如何捕获 TAB 键或使 keydown 捕获字段的值?

P.S keypress 也可以用作 keydown。在我在字段中获得值之前触发事件

编辑 1: 这是代码:

$('input[data-action="keyupNome"]').each(function () {          
        $(this).on("keypress", function(e) {    

            //Se o campo não estiver vazio
            if($(this).val() != '') {               

                if(key != 9)  // the tab key code
                {                                                               
                    limpaCamposBusca('nome');

                    var width  = $('#nomeBusca').width();
                    $('.nomeContainer').css('width', width);            
                    $('.displayNomeTbl').css('width', width);

                    buscaEndereco('Controller/Dispatcher.php?classe=Buscas&acao=buscaEnderecoPorNome', 'nome');     

                }//if key == 9
                else {
                    alert('here');
                    e.preventDefault();
                }       
            }// val == ''   
            else {                  
                clearFields();
                clearBuscaCliente();
                reactivateFields();
            }       

        }); 
    });

最佳答案

诀窍是使用 keydown 并将字段的实际值与当前按下的字符组合,或者在 keydown 中捕获 TAB 并设置要使用的外部变量在 keyup 中,如我的示例所示。

编辑: 事实上,我意识到不阻止 keydown 中 TAB 的默认行为不会触发 keyup。因此,不需要变量,只是防止按下 TAB 键。无论如何,如果您所说的故障在某些情况下存在,则此版本始终有效。

(function() {

var tabKeyPressed = false;

$("#t").keydown(function(e) {
   tabKeyPressed = e.keyCode == 9;
   if (tabKeyPressed) {
      e.preventDefault();
      return;
   }
});

$("#t").keyup(function(e) {
   if (tabKeyPressed) {
      $(this).val("TAB"); // Do stuff for TAB
      e.preventDefault();
      return;
   }

   //Do other stuff when not TAB
});

})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="t" value="">

关于javascript - 使用 keyup 捕获 TAB 键按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37144885/

相关文章:

javascript - 多次下拉选择后更新页面部分

javascript - Bootstrap 4 提前输入

jquery - 如何检查一个元素是否存在于另一个元素中?

javascript - 如何循环遍历坐标数组来为图层组创建 map 标记?

javascript - 如何使 ReactJS 中的表格可排序?

javascript - 异步与标准回调混合

javascript - 在 ES5 Javascript 中,如何在不使用 concat 的情况下将项目添加到数组并立即返回新数组?

javascript - 对齐三个按钮,使它们位于两个 Bootstrap Jumbotron 容器的底部

javascript - jQuery 选择器 -> 特定表中的所有 TD

javascript - 在 JS 中打开一个新选项卡