函数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;
}
}
最佳答案
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
可以根据需要使用这些值进行操作。希望这能使您走上正确的道路。