javascript - js 添加事件监听器不起作用

标签 javascript dom addeventlistener

我正在尝试以交互方式将问题数组 (q) 中的一些问题加载到我的页面中,并在学生单击两个问题之一后注册答案并使用 js while 循环更改问题。我的错误是什么,它不起作用?

var q = [
  ['NFR', 'Reusability'],
  ['NFR', 'Robustness'],
  ['FR', 'Reporting Requirements'],
  ['FR', 'Historical Data']
];

var correct = 0;
var incorrect = 0;
var total = q.length;
var i = 0;

document.getElementById('nick').innerText = name;
document.getElementById('question').innerText = q[0][1];

var nfr = document.getElementById('non-functional');
var fr = document.getElementById('functional');

function callback(ans) {
  if (q[i][0] === ans) {
    correct++;
  } else {
    incorrect++;
  };
  if (i < q.length - 1) {
    i++;
    document.getElementById('question').innerText = q[i][1];
  } else {
    location.href = "answer.html";
  }
}

nfr.addEventListener('click', callback('NFR'));
fr.addEventListener('click', callback('FR'));

最佳答案

你的 while 循环无限循环,因为它逻辑上唯一做的事情就是设置 toNext设置为 False,设置一些事件监听器回调,然后评估 toNext再次,这将永远是 False。所以i++永远不会被调用并且 i < q.length永远是真的。

摆脱 while 循环。编写一个单独的函数来评估答案并用下一个问题更新窗口。使用该函数作为 click 的回调事件。 在回调函数中this将被设置为调用该函数的对象,因此您可以编写如下函数:

function callback() {
    if (this.id == q[i][0]) {
        window.correct++;
    } else {
        window.incorrect++;
    }

    i++;

    set_question(i); // Logic to set the i-th question.
}
<小时/>

编辑

function callback(ans) {
    // This function will return 
    // another function with the ans 
    // variable set, which in turn 
    // will be called as a callback 
    // when needed by the 'click' event.
    return function () {
        if (q[i][0] === ans) {
            correct++;
        } else {
            incorrect++;
        };

        if (i < q.length - 1) {
            i++;
            document.getElementById('question').innerText = q[i][1];
        } else {
            location.href = "answer.html";
        }
    }
}

关于javascript - js 添加事件监听器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48727298/

相关文章:

php - 具有 XPath 编码问题的 DOMDocument。 [?] 很多测试

javascript - XMLHttpRequest 上传属性到底有什么好处?

javascript - 为什么 JavaScript 找不到给定的 InnerHTML 并返回 Cannot set property 'innerHTML' of null?

javascript - angularjs( ionic )中的表单验证对我不起作用

javascript - Yeoman Mean.js 生成的自定义 AngularJS 指令不起作用

javascript - JS 上的匿名函数

javascript - 有没有办法将变量从 ui.router 传递给 Controller ​​?

php - 如何以字符串形式获取节点的xml内容?

javascript - 添加跟踪事件和单击对象的事件监听器?

Java仅解析雅虎温度XML