不跨功能更新变量值

时间:2014-03-11 05:56:45

标签: javascript variables scope

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

3 个答案:

答案 0 :(得分:0)

function inputFocus(element, newClassName, message, id, count){
    element.className += " " + newClassName;
    message += ", " + id;   
    if (count){
        count = false;
    }
}

因此,当您将参数(包括messagecount)传递给inputFocus时,假设它们是标量(布尔值和字符串) ),然后inputFocus对本地变量所做的任何事情都“保持”在inputFocus内。这是因为它传递了标量的,而不是变量本身。

简而言之:

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

解决此问题的一种可能方法是让inputFocus返回countmessage的正确值,然后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函数中设置countinputFocus的值时,这些变量的值仅在该函数的范围内可用。

这是一个值得一读的晚上。如果你想写javascript,绝对值得。

  1. What is the scope of variables in JavaScript?
  2. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope
  3. http://coding.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope/
  4. http://blog.kevinchisholm.com/javascript/scope/