函数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;
    }
}


因此,当您将参数(包括messagecount)传递给inputFocus时,考虑到它们是标量(布尔值和字符串),那么inputFocus对其本地变量执行的操作都会“保持”在inputFocus中。这是因为它传递了标量的值,而不是变量本身。

简而言之:

inputFocus不会更改碰巧将其值传递给它的任何变量。

解决此问题的一种可能方法是让inputFocus返回正确的countmessage值,然后validator可以根据需要使用这些值进行操作。

希望这能使您走上正确的道路。

10-05 23:31