Javascript 是否';按键';在更新输入值之前触发jQuery事件?

Javascript 是否';按键';在更新输入值之前触发jQuery事件?,javascript,jquery,Javascript,Jquery,我在输入字段上有一个按键事件监听器来确认密码。我希望禁用页面上的按钮,直到密码和确认密码字段具有匹配值。我使用的是.keypress()jQuery函数,但它似乎总是比我预期的晚一个字符 这是密码 $('#confirm').keypress(function() { console.log('#confirm').val(); if($('#password').val() == $('#confirm').val()) { $('button').remove

我在输入字段上有一个按键事件监听器来确认密码。我希望禁用页面上的
按钮
,直到
密码
确认密码
字段具有匹配值。我使用的是
.keypress()
jQuery函数,但它似乎总是比我预期的晚一个字符

这是密码

$('#confirm').keypress(function() {
    console.log('#confirm').val();
    if($('#password').val() == $('#confirm').val()) {
        $('button').removeProp('disabled');
        console.log("yes");                
    } else {
        console.log("no");
    }
});
但当我检查元素并查看页面上的控制台窗口时,第一次触发事件时,它会将表单值打印为空白。然后当我输入第二个字符时,它只打印第一个字符,当我输入第三个字符时,它打印前两个字符,以此类推

例如,如果我将
asd
放入
password
字段,并开始在
confirm
字段中键入相同的内容,则输出将如下所示:


不
A.
不
作为
不

因此,此时,
password
confirm
字段都有“asd”,但我需要输入一个额外的字符,然后才能识别该字符,并从按钮中删除“disabled”属性

我尝试过使用
.change()
而不是
.keypress()
,但是直到
输入
字段失去焦点时才会触发,这不是我想要的

我希望页面上的按钮被禁用,直到password和confirm password字段具有匹配的值

如果这是您的目标,您可以将事件侦听器添加到调用验证函数的两个输入中:

$('#password').on("input", function() { validatePassword(); });

$('#confirm').on("input", function() { validatePassword(); });

function validatePassword() {
    if($('#password').val() && $('#confirm').val() && $('#password').val() == $('#confirm').val()) {
        $('button').prop('disabled', false);
    } else {
        $('button').prop('disabled', true);
    }
}
为按钮添加一个ID也是值得的。使用“按钮”将启用/禁用页面上的所有元素


示例:

几个月前我也有同样的问题。
尝试使用Jquery中的
键控功能。

按键时会触发按键事件,因此输入尚未填充。

释放钥匙时会触发Keyup事件。

可以使用
输入事件并将其简化为

var $passwords =$('#confirm, #password').on('input', function() {
    var thisValue = this.value.trim();
    // does this input have value and does it match other
    var isValid = thisValue  && thisValue  === $passwords.not(this).val().trim();
    // boolean used for disabled property    
    $('button').prop('disabled', !isValid);      
});

您可以尝试改用
keyup
事件,它应该在用户释放键后触发-确保您包括一些其他指示,表明它们不匹配,而不是禁用按钮-这将真正让我感到沮丧,因为用户使用
输入
事件;这就是它的用途,它与鼠标粘贴、输入法一起工作,etc@JamesThorpe还有其他的视觉提示,我同意这一点,因为页面上只有一个按钮,所以禁用所有按钮不是一个问题。那么我所回答的应该很好。如果您有任何问题,请告诉我。前两行可以轻松组合到
$(“#确认,#密码”)。在('input',validatePassword)
上,我同意可以这样组合它们。但是,如果您想为一个输入添加额外的逻辑,或者调用多个函数,该怎么办?例如,如果要验证用户名,可以调用一个函数检查可用性(异步),调用另一个函数检查有效字符。我想我更喜欢额外的代码行以增加可读性;)哈哈,为什么要削减价值?如果某人在第一个字段中有空格,但在第二个字段中没有空格,该怎么办?例如,password=“test123”和confirm=“test123”。他们是不平等的,不应该被这样对待修正了…修剪了。波蒂说你根本不应该修剪。password123和password123会在不应该的时候启用按钮。特别是如果他们希望密码的末尾有一个空格。