按键后jQuery获取输入值

时间:2012-01-09 21:15:03

标签: jquery javascript-events

我有以下功能:

$(document).ready(function() {
    $("#dSuggest").keypress(function() {
        var dInput = $('input:text[name=dSuggest]').val();
        console.log(dInput);
        $(".dDimension:contains('" + dInput + "')").css("display","block");
    });
});

出于某种原因,对于第一个按键,我在控制台日志中得到一个空字符串。

10 个答案:

答案 0 :(得分:171)

意识到这是一个相当古老的帖子,无论如何我会提供答案,因为我正在努力解决同样的问题。

您应该使用"input"事件,并使用.on方法注册。这很快 - 没有keyup的延迟,并解决了您描述的丢失的最新按键问题。

$('#dSuggest').on("input", function() {
    var dInput = this.value;
    console.log(dInput);
    $(".dDimension:contains('" + dInput + "')").css("display","block");
});

Demo here

答案 1 :(得分:143)

这是因为在将新字符添加到元素的keypress之前,触发了value个事件(因此第一个keypress事件在之前被触发添加第一个字符,而value仍为空。您应该使用keyup代替,在添加字符后触发

请注意,如果您的元素#dSuggestinput: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);  
    });  
});