函数Message
中的变量count
和布尔值validator
在运行inputFocus
函数时不会更新。因此,validator
始终返回true。
(function(){
var form = document.forms[0];
form.addEventListener('submit', function(evt){
if(!validator(form)){
evt.preventDefault();
}
}, false);
})();
main.js
function validator(form){
var message = "The input below is invalid";
var count = true;
if(!phoneValidation(form.phone.value)){
inputFocus(form['phone'], "focus", message, form.phone.name, count);
}
if(!count){
alert(message);
return count;
} else {
return true;
}
}
function inputFocus(element, newClassName, message, id, count){
element.className += " " + newClassName;
message += ", " + id;
if (count){
count = false;
}
}
答案 0 :(得分:0)
function inputFocus(element, newClassName, message, id, count){
element.className += " " + newClassName;
message += ", " + id;
if (count){
count = false;
}
}
因此,当您将参数(包括message
和count
)传递给inputFocus
时,假设它们是标量(布尔值和字符串) ),然后inputFocus
对本地变量所做的任何事情都“保持”在inputFocus
内。这是因为它传递了标量的值,而不是变量本身。
inputFocus
不会更改值碰巧传递给它的任何变量。
解决此问题的一种可能方法是让inputFocus
返回count
和message
的正确值,然后validator
可以按照自己的意愿执行这些值。< / p>
希望这能让你走上正轨。
答案 1 :(得分:0)
将变量Message和count移到所有函数之外,使其像全局一样。这将让页面中的任何javascript函数更新它们
var message;
var count;
function validator(form){
message = "The input below is invalid";
count = true;
if(!phoneValidation(form.phone.value)){
inputFocus(form['phone'], "focus", message, form.phone.name, count);
}
if(!count){
alert(message);
return count;
} else{
return true;
}
}
function inputFocus(element, newClassName, message, id, count){
element.className += " " + newClassName;
message += ", " + id;
if (count){
count = false;
}
}
同时,如果可以将使用这些变量的函数合并为一个变量,那么使用全局变量并不是一个好习惯。
答案 2 :(得分:-1)
这是因为当您在message
函数中设置count
和inputFocus
的值时,这些变量的值仅在该函数的范围内可用。
这是一个值得一读的晚上。如果你想写javascript,绝对值得。