0

两个输入的密码应该相同,我想在它们不匹配时显示通知。目标是在键入期间而不是在按下保存按钮后显示通知。

我是 javascript 新手,我也尝试过 functionname function() 表示法。

以下js:

function updateError (error) {
if (error == true) {
    $(".error").hide(500);
}else{
 $(".error").show(500);
}
};

function checkSame() {
   var passwordVal = $("input[name=password-check]").val();
   var checkVal = $("input[name=password]").val();
   if (passwordVal == checkVal) {
     return true;
   }
   return false;
};


document.ready(function(){
 $("input[name=password-check]").keyup(function(){updateError(checkSame());});
 $("input[name=password]").keyup(function(){updateError(checkSame());});
});

和 HTML:

 @Html.Password("password") 
 @Html.Password("password-check")     
 <span class="error">Errortext</span> </td></tr>

但它不起作用..谢谢!

编辑:现在我已将 JS 代码更改为:

$("input[name=password-check]").keyup(function(){updateError(checkSame());}); $("input[name=password]").keyup(function(){updateError(checkSame());});

--> 现在它可以工作了,但只有一次,在用户输入匹配的密码后,验证停止工作

解决了,问题是引用:

$("input[name='password-check']").keyup(function(){updateError(checkSame());});
$("input[name='password']").keyup(function(){updateError(checkSame());});
4

3 回答 3

1

你在做相反的事情

if (error == true) {
    $(".error").show(500);
}else{
 $(".error").hide(500);
 }

根据评论编辑:

尝试将名称放在引号内,例如

$("input[name='password-check']").keyup(function(){updateError(checkSame());});
$("input[name='password']").keyup(function(){updateError(checkSame());});
于 2012-05-18T14:05:29.110 回答
0

在 checkSame 中,您可能希望使用 indexOf 检查 passwordVal 是否包含 checkVal,因为在键入时,密码还不相等。

   if (passwordVal.indexOf(checkVal)>-1 || checkVal.indexOf(passwordVal)>-1  ) {
     return true;
   }
于 2012-05-18T14:09:46.087 回答
0

正如 int2000 所说,在 keyup 上触发 checkSame 似乎很奇怪,但如果这是你想要的,好的。尝试更改您的 checkSame 函数,如下所示:

function checkSame() {
   var passwordVal = $("input[name=password-check]").val();
   var checkVal = $("input[name=password]").val();
   if (passwordVal == checkVal) {
     return false;
   }
   return true;
};

请记住,您将 checkSame 的结果传递给 updateError,因此如果密码相同,则没有错误。

于 2012-05-18T14:15:52.440 回答