我需要实现 2 个目标,但我一次只实现一个目标,而不是同时实现两个目标。
首先,我有一个输入字段,当按下按键时应该触发一个事件,并且我需要捕获字段值。我使用字母、数字和 TAB 键。因此,如果我使用 keyup,它会在第一个字符处触发。如果我使用 keydown ,则需要 2 个字符才能触发,因为第一次触发时,尚未按下该字符。因此,当我第二次按时,它会触发第一个字母,依此类推。
话虽如此,很明显我需要的是 keyup 事件,将值放入字段中,然后触发该事件。但 TAB 在我的情况下有特殊含义,它不是默认行为,并且使用 TAB 键我无法捕获 e.which、e.charCode 或 e.keyCode!只有通过 keydown 我才能获得这些值!
现在我不知道该怎么办。如何捕获 TAB 键或让 keydown 捕获字段的值?
P.S 按键也可用作按键。在我获得字段值之前事件被触发
EDIT 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
并将字段的实际值与当前按下的字符组合起来或捕获 TABkeydown
并设置一个要使用的外部变量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="">
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)