Javascript 使用两个输入字段将函数添加到.keyup()

Javascript 使用两个输入字段将函数添加到.keyup(),javascript,jquery,keyup,Javascript,Jquery,Keyup,我有一个密码字段和一个密码确认字段。我正在尝试将keyup添加到这两个字段中,以便无论何时有人开始输入其中一个字段,我都可以向他们显示密码是否匹配 我实现了一个有效的版本,但正如您所看到的,它并不理想 function comparePassword() { var password1 = $("#password1").val(); var password2 = $("#password2").val(); if (password1 != password2) { $

我有一个密码字段和一个密码确认字段。我正在尝试将keyup添加到这两个字段中,以便无论何时有人开始输入其中一个字段,我都可以向他们显示密码是否匹配

我实现了一个有效的版本,但正如您所看到的,它并不理想

function comparePassword() {
  var password1 = $("#password1").val();
  var password2 = $("#password2").val();

  if (password1 != password2) {
    $(".divDoPasswordsMatch").html("Passwords do not match!");
  }
  else {
    $(".divDoPasswordsMatch").html("Passwords match.");
  }

$("#password1, #password2").keyup(comparePassword);
我不想在comparePassword函数中设置变量password1和password2。这部分是因为我需要多次使用这个函数。我想将这两个输入字段传递到keyup中,如下所示:

$("#password1, #password2").keyup(comparePassword($("#password1").val(), $("#password2").val()));
理想情况下,我希望comparePassword知道如何从password1和password2继承值,而无需再次指定:

$("#password1, #password2").keyup(comparePassword(this.value, this.value)); 
最后两个代码示例不起作用。我该怎么写


提前谢谢

您需要为处理此事件的事件创建一个处理程序。大概是这样的:

var keyupHandler = function() {
  comparePassword($("#password1").val(), $("#password2").val());
};
$("#password1, #password2").keyup(keyupHandler);

代码示例不起作用的主要原因是它们都会立即调用函数,而不是在事件发生时调用。这就是处理程序所要处理的。

您可以用这种方式重新排列代码。 //这将是比较任意两个不同字符串值的函数 函数比较PasswordPassword1、password2{ 如果password1!=password2{ $.divDoPasswordsMatch.htmlPasswords不匹配!; } 否则{ $.divDoPasswordsMatch.htmlPasswords匹配。; } } $document.readyfunction{ $password1,password2.keyup函数{ 比较密码$password1.val、$password2.val; }; } ;
您可以通过如下方式修改代码来实现您的目标:

var keyupHandler = function() {
  comparePassword($("#password1").val(), $("#password2").val());
};
$("#password1, #password2").keyup(keyupHandler);
//在脚本开始时创建一次对所需DOM元素的引用 var pw1=$password1; var pw2=$password2; var pwMatch=$.divDoPasswordsMatch; 函数比较PasswordPassword1、password2{ 如果password1!=password2{ pwMatch.htmlPasswords不匹配!; }否则{ pwMatch.htmlPasswords匹配。; } } $pw1,pw2.keyup=>{ //在keyup上传递值-不必担心再次在DOM中查询输入元素 比较密码pw1.val、pw2.val; }; 密码1:密码2: Jquery的一个示例

//编写迷你JQuery插件 $.fn.isSamePasswords=函数{ 返回此[0]。值===此[1]。值 } //keyup示例 $password1,password2.keyup函数{ var pm=$password1,password2.isSamePasswords?密码匹配:密码不匹配! $.divDoPasswordsMatch.htmlpm; }
通过保存尽可能多的引用,可以使用缓存构造函数使流程尽可能少地密集。这也将在施工时将搬运器连接到适当的位置

函数密码显示,…sel{ this.fields=sel.mapfield=>$field; this.display=$display; this.toDisplay=msg=>this.display.htmlmsg; this.theSame=>newsetthis.fields.mapfield=>field.val.size==1; this.compare==>this.todisplayis.theSame?密码匹配:密码不匹配; this.fields.forEachfield=>field.keyuptis.compare; } Passwords.divdopasswords匹配,password1,password2;
您可能希望将密码字段存储在变量中,以使其运行更快,尤其是因为每次按键都会触发密码字段