Answers:
这是因为keypress
事件被触发之前,新的角色加入到value
该元素的(所以第一个keypress
事件是第一个字符之前解雇加入,而value
仍是空的)。您应该改用添加字符后keyup
触发的代码。
请注意,如果您的元素#dSuggest
相同,则input:text[name=dSuggest]
可以大大简化此代码(如果不相同,则其名称id
与另一个元素的名称相同不是一个好主意)。
$('#dSuggest').keypress(function() {
var dInput = this.value;
console.log(dInput);
$(".dDimension:contains('" + dInput + "')").css("display","block");
});
input
事件类型提供实际支持的内容。
意识到这是一篇比较老的文章,无论如何,我都会提供一个答案,因为我正努力解决同样的问题。
您应该改用"input"
事件,并向.on
方法注册。快速-没有滞后,keyup
可以解决您描述的最新按键缺失问题。
$('#dSuggest').on("input", function() {
var dInput = this.value;
console.log(dInput);
$(".dDimension:contains('" + dInput + "')").css("display","block");
});
使用.keyup
代替按键。
也可以使用$(this).val()
或仅this.value
访问当前输入值。
在这里演示
有关.keypress
jQuery文档的信息,
当浏览器注册键盘输入时,会将keypress事件发送到一个元素。这与keydown事件类似,但重复按键的情况除外。如果用户按住某个键,则一次按下事件会触发一次,但是会为每个插入的字符触发单独的按键事件。此外,修饰键(例如Shift)可触发按键事件,但不会触发按键事件。
keyup
速度太慢,并且可以在不释放键的情况下按住它并且必须进行操作。最好在keydown
稍微超时的情况下使用,以便实际更改该值。
您必须中断执行线程以允许输入更新。
$(document).ready(function(event) {
$("#dSuggest").keypress(function() {
//Interrupt the execution thread to allow input to update
setTimeout(function() {
var dInput = $('input:text[name=dSuggest]').val();
console.log(dInput);
$(".dDimension:contains('" + dInput + "')").css("display","block");
}, 0);
});
});
keyup
延迟对于某些用途而言太慢,并且也不会自动过滤修饰键。这实际上对我来说更好。
这是因为Keypress
在添加新字符之前会触发事件。请改用“ keyup”事件,它会在您遇到的情况下完美运行。
$(document).ready(function() {
$("#dSuggest").keyup(function() {
var dInput = $('input:text[name=dSuggest]').val();
console.log(dInput);
$(".dDimension:contains('" + dInput + "')").css("display","block");
});
});
我要补充一点,如果您有许多文本框,并且必须在其keyup事件上执行相同的操作,则可以简单地给他们提供一个通用的CSS类(例如commoncss),并像这样应用keyup事件。
$(document).ready(function() {
$(".commoncss").keyup(function() {
//your code
});
});
这将大大减少您的代码,因为您不必为每个文本框按id来应用keyup事件。
jQuery在按键后获取输入值
https://www.tutsmake.com/jquery-keypress-event-detect-enter-key-pressed/
i = 0;
$(document).ready(function(){
$("input").keypress(function(){
$("span").text (i += 1);
});
});
<!DOCTYPE html>
<html>
<head>
<title>jQuery keyup() Method By Tutsmake Example</title>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<body>
Enter something: <input type="text">
<p>Keypresses val count: <span>0</span></p>
</body>
</html>