无法从名为onclick的函数中获取变量

时间:2011-12-20 17:04:07

标签: javascript function variables arguments

我正在调用一个函数onclick secVar(sec1);,它应该通过下面的脚本运行它,但它似乎没有这样做,有人可以告诉我我做错了什么。我是javascript的新手,只对脚本有一点经验,而且这段代码似乎越来越少,我想要它。

<script type="text/javascript">
        var sec1=0;
        var sec2=0;
        var sec3=0;
        function secVar(){
            if(sec1) {
                sec1++;
                document.getElementById('sec1text').innerHTML = sec1;
            }
            if(sec2) {
                sec2++;
                document.getElementById('sec2text').innerHTML = sec2;
            }
            if(sec3) {
                sec3++;
                document.getElementById('sec3text').innerHTML = sec3;
            }
        }

        function largestVar(){
                if (sec1 >= sec2 && sec1 >= sec3) {
                    //a
                    document.getElementById('rig').innerHTML = 'Test1';
                } else if (sec2 >= sec1 && sec2 >= sec3) {
                    //b
                    document.getElementById('rig').innerHTML = 'Test2';
                } else {
                    //c
                    document.getElementById('rig').innerHTML = 'Test3';
                }
            }
    </script>

如果这有帮助,在我尝试添加脚本以确定最大的变量之前,旧代码是下面的代码。它正在增加变量onclick,但不再如此。 onclick在那时包含sec1Var()

<script type="text/javascript">
    var sec1=0;
    var sec2=0;
    var sec3=0;

    function sec1Var(){
    sec1++;
    document.getElementById('sec1text').innerHTML = sec1;
    }

    function sec2Var(){
    sec2++;
    document.getElementById('sec2text').innerHTML = sec2;
    }

    function sec3Var(){
    sec3++;
    document.getElementById('sec3text').innerHTML = sec3;
    }</script>

如果有人能向我解释我做错了什么,我会非常感激。

2 个答案:

答案 0 :(得分:1)

我认为很难说出你的意图。 Sparticus正确 IF 你要做的是查看sec1,2和3当前是真还是假(0或1)。由于它们目前是假的,因此代码永远不会像Sparticus正确指出的那样做任何事情。

但是,我不相信这实际上是你的意思。看起来你要检查的条件是你是否试图增加sec1,2或3.换句话说,“如果你传递给我sec1,增加它并更新一段HTML”。

但是变量不能那样工作。当你说secVar(sec1)你实际上说的是'secVar(0)'。我不认为这是你的意图。

所以,如果我错了,浪费我的时间,但因为我已经开始了,我们假装我是对的:

secVar需要能够接受一个参数,但是现在你已经声明它是无效的。更改它以接受参数是第一步:

function secVar(param) { ... };

但这仍然无能为力。因为当你仍然使用现有语法传递“0”时。你需要传递一些可以检查的东西,比如字符串:

secVar('sec1');

执行此操作时,您现在可以更新条件以检查传递的字符串

if (param === 'sec1') { ... }

这是一个小提琴:http://jsfiddle.net/ch4yk/

备注:

  • 小提琴包含jQuery,只是为了方便按钮上的强力事件绑定。这只是一个例子。你不需要jQuery;根据需要绑定你的活动。
  • 目前没有使用最大值函数做任何事情,即使代码在小提琴中

答案 1 :(得分:0)

在此实施中,您的所有计数器都不会增加。

当secVar()运行时,所有计数器都为零。它们永远不会增加,因为它们从零开始。