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会在不应该的时候启用按钮。特别是如果他们希望密码的末尾有一个空格。