如何使用单击和切换更新变量值

时间:2011-10-25 17:57:10

标签: javascript jquery

$(document).ready(function() {

    var varChange = '';
    var baseVar = 50;

    selectBaseVar = function(){
        switch (varChange) {case 101: varChange = 501; break;
                            case 501: varChange = 101; break;
                            default:  varChange = 101; break;}
        console.log('internal val: '+varChange);
        return varChange;
    };

    $("#myButton").click(function(){
        selectBaseVar();
    });

    selectBaseVar();

    console.log('external val: '+varChange);
    console.log('base baseVar = '+baseVar);
    baseVar += varChange;    // How do I update this value upon the button click event?
    console.log('updated baseVar = '+baseVar); // it works only in the document.ready state
});

适用于document.ready州,但不适用于click事件。范围问题可能是原因。

我不知道如何解决此问题


意图是将baseVar保持为常数@ 50
增加baseVar的值,到期
baseVar + = varChange;
切换varChange,并更新baseVar


在docuent.ready中,我们得到了:


内部:101
外部val:101
base baseVar = 50
更新了baseVar = 151


如果我点击,我分别得到了预期的内部值:
内部val:501
内部val:101


但是(更新后的baseVar = 151)无论它切换到什么值


而不是我要做的事情,那就是影响外部变量 baseVar 的值为:
更新了baseVar = 151
更新了baseVar = 551

注意:为了其他有益的功能,有充分的理由将 baseVar 变量排除在 selectBaseVar()的范围之外从切换结果相同,但已超出 selectBaseVar()的范围。


感谢

2 个答案:

答案 0 :(得分:1)

这似乎对我有用:

http://jsfiddle.net/mkqmm/1/

确保将代码包装在

$(document).ready(function() {

});

答案 1 :(得分:1)

你想要达到的目的似乎是:

$(document).ready(function() {

    var varChange, baseVar = 50;

    selectBaseVar = function(){
        varChange = (varChange == 101) ? 501 : 101;
        console.log('internal val: '+varChange);
        return varChange;
    };


    $("#myButton").click(function(){
        selectBaseVar();
        baseVar += varChange;
        console.log('button handler val: ' + varChange);
    });

    selectBaseVar();

    console.log('external val: ' + varChange);
    console.log('base baseVar = ' + baseVar);
    baseVar += varChange;    // How do I update this value upon the button click event?
    console.log('updated baseVar = ' + baseVar); // it works only in the document.ready state    
});