全局变量不会增加

时间:2014-05-06 07:23:40

标签: javascript addeventlistener

大部分操作都在函数next中。其他功能是为上下文提供的。选择正确答案时,全局变量tally会增加。但是变量nr没有增加,我无法弄清楚它是不是。

您可以看到我注释掉next函数返回了一个带有tallynr的对象,并在事件侦听器中分配了这些值。当我这样做的时候,它起作用了。但它也应该以另一种方式工作,对吧。

var nr = 0;
var tally = 0;

function onLoadEvent(nr) {
    //alert('onload');
    var quiz = document.getElementById('quiz');
    var question = allQuestions[nr];
    var next = quiz.lastElementChild;

    var qHeader = "<h2>" + question.question + "</h2>";
    var q = "";
    for(var i=0;i<question.choices.length;i++){
        q = q + '<p><label for="a' + i + '">' +
            '<input type="radio" id="a' + i + '" name="q" value="' +
            i + '">' + question.choices[i] + '</label></p>';
    }
    quiz.innerHTML = qHeader + q + next.outerHTML;
    //next = document.getElementById('next');
}

function getChecked(){
    var radios = document.getElementsByName('q');
    var radio;
    for(var i=0;i<radios.length;i++){
        if(radios[i].checked){
            radio = radios[i];
            break;
        }
    }
    return radio;
}

function next(nr){
    if (getChecked() !== undefined) {
        var answer = getChecked();
        if(answer.value == allQuestions[nr].correctAnswer){
            tally = tally + 1;
        }
        nr = nr + 1;
        if (nr>=allQuestions.length){
            alert("You got " + tally + " points!");
        } else {
            onLoadEvent(nr);
        }
    } else {
        alert('You need to check a radio button');
    }
    //return {nr: nr, tally: tally};
}

var form = document.getElementById('quiz');
form.addEventListener('click', function(event){
    if(event.target.id === 'next'){
        next(nr);
        //nr = obj.nr;
        //tally = obj.tally;
    } else if(event.target.id === 'prev'){}
}, false);

window.addEventListener('load', function(event){onLoadEvent(nr);}, false);

1 个答案:

答案 0 :(得分:2)

您正在接受隐藏全局范围nr的具有相同名称nr的参数。

解决问题的方法是删除nr作为参数。因此,请使用function onLoadEvent()代替function onLoadEvent(nr)