【发布时间】:2017-02-01 21:18:50
【问题描述】:
我在输入字段上有一个按键事件监听器来确认密码。我希望页面上的button 被禁用,直到password 和confirm-password 字段具有匹配的值。我正在使用.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 字段中输入相同的内容,输出将如下所示:
<blank>
no
a
no
as
no
所以此时password 和confirm 字段都有“asd”,但我需要输入一个额外的字符才能被识别,并从按钮中删除“disabled”属性。
我尝试使用.change() 代替.keypress(),但直到input 字段失去焦点时才会触发,这不是我想要的。
【问题讨论】:
-
您可以尝试使用
keyup事件,它应该在用户释放键后触发 - api.jquery.com/keyup -
除了禁用按钮之外,请确保包含其他不匹配的指示 - 这真的会让我作为用户感到沮丧
-
使用
input事件;这就是它的用途,它适用于鼠标粘贴、IME 等 -
@JamesThorpe 还有其他的视觉提示,我同意这种挫败感哈哈
标签: javascript jquery