我有以下功能:
$(document).ready(function() {
$("#dSuggest").keypress(function() {
var dInput = $('input:text[name=dSuggest]').val();
console.log(dInput);
$(".dDimension:contains('" + dInput + "')").css("display","block");
});
});
出于某种原因,对于第一个按键,我在控制台日志中得到一个空字符串。
答案 0 :(得分:171)
意识到这是一个相当古老的帖子,无论如何我会提供答案,因为我正在努力解决同样的问题。
您应该使用"input"
事件,并使用.on
方法注册。这很快 - 没有keyup
的延迟,并解决了您描述的丢失的最新按键问题。
$('#dSuggest').on("input", function() {
var dInput = this.value;
console.log(dInput);
$(".dDimension:contains('" + dInput + "')").css("display","block");
});
答案 1 :(得分:143)
这是因为在将新字符添加到元素的keypress
之前,触发了value
个事件(因此第一个keypress
事件在之前被触发添加第一个字符,而value
仍为空。您应该使用keyup
代替,在添加字符后触发。
请注意,如果您的元素#dSuggest
与input:text[name=dSuggest]
相同,则可以大大简化此代码(如果不是,则使用名称与{相同)的元素{1}}另一个元素不是一个好主意。)
id
答案 2 :(得分:31)
使用.keyup
代替按键。
还可以使用$(this).val()
或this.value
来访问当前输入值。
DEMO 此处
来自jQuery docs的.keypress
信息,
当浏览器注册时,keypress事件被发送到元素 键盘输入。这类似于keydown事件,除了在 密钥重复的情况。如果用户按下并按住键,则为keydown 事件被触发一次,但会触发单独的按键事件 对于每个插入的字符。另外,修饰键(如 Shift)触发keydown事件但不触发按键事件。
答案 3 :(得分:5)
您必须中断执行线程以允许输入更新。
$(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);
});
});
答案 4 :(得分:4)
这是因为在添加新字符之前触发了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事件。
答案 5 :(得分:2)
请使用此代码输入文字
prompt("Enter your name");
var lifeExpectancy = Math.random() ;
lifeExpectancy = Math.floor(lifeExpectancy * 100) + 30;
if (lifeExpectancy <= 100 && lifeExpectancy > 75 ){
alert(lifeExpectancy + " Years , Many more birthdays to come !!!")
} else{
alert(lifeExpectancy + " Years.")
}
如果您使用$('#search').on("input",function (e) {});
,则需要模糊输入
如果您使用.on("change",function (e) {});
,那么您会在输入的最后一个字符之前获得值
答案 6 :(得分:1)
我正在寻找一个ES6示例(所以它可以通过我的linter) 所以对于那些正在寻找相同的人来说:
$('#dSuggest').keyup((e) => {
console.log(e.currentTarget.value);
});
我也会使用keyup,因为你得到了填充的当前值。
答案 7 :(得分:1)
只需使用超时即可拨打电话;在事件堆栈结束后(即在调用默认事件之后)将调用超时
$("body").on('keydown', 'input[type=tel]', function (e) {
setTimeout(() => {
formatPhone(e)
}, 0)
});
答案 8 :(得分:0)
我认为您需要的是以下原型
$(element).on('input',function(){code})
答案 9 :(得分:0)
jQuery在按键后获取输入值
https://www.tutsmake.com/jquery-keypress-event-detect-enter-key-pressed/
print(dict2)
#{'roll': {1: {'cde': 500, 'abc': 200}, 2: {'cbd': 600, 'abc': 200}},
#'no_roll': {}}
i = 0;
$(document).ready(function(){
$("input").keypress(function(){
$("span").text (i += 1);
});
});