我需要实现两个目标,但我一次归档一个目标,而不是两个目标。 首先,我有一个输入字段,当按下一个键时我应该触发一个事件,我需要捕获字段值。我使用字母,数字和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();
}
});
});
答案 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;