jQuery .val()忽略输入的第一个字符

mer*_*ur0 1 jquery input event-listener addeventlistener

我有一个输入和一个标签。当用户在输入框中键入任何内容时,我想显示标签。但是,如您在代码段(或jsFiddle上)中所见,在输入框中键入的第一个字符将被忽略,并且您需要键入另一个字符以使值不为空。

$('input').on('change paste keydown', function(event) {
    var inputID = event.target.id;
    var value = $('#' + inputID).val();
    $('#' + inputID + 'Label').css('visibility', 'visible');   

    if (value == ''){
        $('#' + inputID + 'Label').css('visibility', 'hidden');
    }
})
Run Code Online (Sandbox Code Playgroud)
#input1Label { visibility: hidden; }
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label id='input1Label'>Label</label>
<input id='input1'>
Run Code Online (Sandbox Code Playgroud)

Utk*_*nos 5

听着input

keydown,顾名思义,它会在键释放之前触发,并且对您而言至关重要的是,在值更新之前触发。

input不仅可以覆盖当前正在监听的所有三个事件,而且还可以更新值触发,这意味着您将获得最新的价值。

$('input').on('input', event => {
    let inputID = event.target.id;
    $('#'+inputID+'Label').css('visibility', $('#'+inputID).val() ? 'visibile' : 'hidden');
})
Run Code Online (Sandbox Code Playgroud)