我有这个验证脚本我正在努力,但无法理解为什么我有一个问题。
你可以看到我有一个check = false / true,在运行ajax调用之前检查。
但是,即使某个字段为空并且check设置为false,它仍然在运行该调用。
这样:
// JavaScript - Update Password AJAX
$(document).ready(function () {
// When the form is submitted
$('.updatepasswordform').submit(function () {
var check = true;
// Get the values
var password1 = $("input[name=password1]").val();
var password2 = $("input[name=password2]").val();
var newpassword = $("input[name=newpassword]").val();
/* Password Validation */
// If fields are empty
if (password1 === '') {
check = false;
$("input[name=password1]").css('border', 'solid 2px red');
}
// If fields are empty
if (password2 === '') {
check = false;
$("input[name=password2]").css('border', 'solid 2px red');
}
// If fields are empty
if (newpassword === '') {
check = false;
$("input[name=newpassword]").css('border', 'solid 2px red');
}
if (check = true) {
$.ajax({
type: "POST",
url: "process/updatepassword.php",
data: $(".updatepasswordform").serialize(),
dataType: "json",
success: function (response) {
/* Checks for database validation, removed for space saving */
}
});
}
return false;
});
});
答案 0 :(得分:2)
if (check = true)
是作业。你需要一张支票。
if (check == true) {
或者正如JasonP提到的那样,只是
if (check) {
答案 1 :(得分:1)
你只在if语句中使用单个equals。将其更改为此
if (check == true) {
甚至更好
if (check) {
答案 2 :(得分:0)
您正在使用作业=
而不是比较==
来测试check
。而不是......
if (check = true) {
你打算写这个:
if (check == true) {
这是一个常见的陷阱。在true
语句的条件内将check
分配给if
是完全有效的,但在这种情况下,它不是您的意图。 check = true
的结果是也 true
(允许并行分配,a = b = c = true
工作),所以实际上你正在做{{1} }。这是可取的,但是在意外使用时常常是麻烦的根源。一般用法是将表达式的结果赋给临时变量,该变量的作用域为if (true)
语句。
基本上,而不是......
if
...它可以让你写下来:
var result = expensiveCalculation()
if (result) {
// do something with result
}
注意:
在这种特殊情况下,当您对布尔if (result = expensiveCalculation()) {
// do something with result
}
/ true
进行测试时,最好只编写false
或if (check)
,而不是使用{显式比较{1}}。
注2:
“check”是一个特别糟糕的变量名称。你的变量应该具有表现力;没有评论的帮助,我应该知道它的作用。在这种情况下,我已将其命名为至少 if (!check)
,或可能==
,或反转您的支票并使用valid
和formIsValid