如何为Keypress事件添加延迟?解决仅获取第二个输入数字的问题
解决Keypress事件无法获取当前输入字符的问题
你遇到的问题是因为keypress事件触发时,当前按下的字符还未写入输入框的value属性,所以第一次按键时val()只能拿到输入框之前的空值,第二次按键时才能拿到第一次输入的内容。
最简单的解决方案:改用keyup事件
keyup事件在按键松开后触发,此时输入框的value已经更新为最新内容,无需额外延迟:
$('#cuota').on('keyup', function(event) { // 注意原代码的语法错误:$('#cuota) 缺少闭合引号,已修正 var precio_origen = $('#cuota').val(); console.log(precio_origen); });
如果必须使用keypress事件,有两种处理方式:
- 短延迟后获取输入框值
通过setTimeout等待字符写入输入框后再获取:
$('#cuota').on('keypress', function(event) { setTimeout(() => { var precio_origen = $('#cuota').val(); console.log(precio_origen); }, 10); // 10ms的延迟足够确保字符写入 });
- 直接从事件对象中获取当前按下的字符
不需要等待,直接拼接已有值和当前输入的字符:
$('#cuota').on('keypress', function(event) { var currentChar = String.fromCharCode(event.which); var precio_origen = $(this).val() + currentChar; console.log(precio_origen); });
注意:原代码中存在语法错误,$('#cuota)缺少闭合的单引号,需要修正为$('#cuota')才能正常运行。
内容的提问来源于stack exchange,提问作者JCarlosIV
相关产品推荐
相关产品推荐

