使用键盘

时间:2016-05-10 17:10:24

标签: javascript jquery

我需要实现两个目标,但我一次归档一个目标,而不是两个目标。 首先,我有一个输入字段,当按下一个键时我应该触发一个事件,我需要捕获字段值。我使用字母,数字和TAB键。因此,如果我使用keyup,它会在第一个char处激活。如果我使用keydown,它需要2个字符才能触发,因为它在第一次触发时尚未按下char。因此,当我第二次按下时,它会以第一个字母开始,依此类推。

很明显,我需要的是将值放在字段中然后触发事件的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();
            }       

        }); 
    });

1 个答案:

答案 0 :(得分:6)

诀窍是使用keydown并将字段的实际值与当前按下的字符组合起来以捕获keydown中的TAB并设置要在keyup中使用的外部变量在我的例子中。

编辑: 事实上,我意识到在keydown中不防止TAB的默认行为并不能解决密钥问题。因此,不需要变量,但仅在keydown上阻止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="">
&#13;
&#13;
&#13;