为什么这个onClick事件没有正确应用?

时间:2014-02-09 19:50:09

标签: javascript javascript-events

我正在使用后期绑定将onClick事件分配给复选框(样式为点)。我的第一个任务[位于https://github.com/farfromunique/vampirrePoints/blob/master/events.js#L264]完美无缺,并按预期做出反应 - 所有点都将其作为onClick点击:

/* https://github.com/farfromunique/vampirrePoints/blob/master/main.js#L440 */
allDots[i].onclick = function() { 
    if (this.checked) {
        decrementCounter(1);
    } else {
        incrementCounter(1);
    };
}

但是,当Step11()被触发并且freebieDotSetup()被调用时,只有部分的复选框才会更新其onClicks。具体而言,sta1, sta2, sta3, sta4, sta5(也可能是其他人)保持其初始值。

我已经尝试在分配过程中放入console.log()语句,看起来分配发生了,但它并没有“坚持”。为什么这不起作用?

代码参考(整个网站):https://github.com/farfromunique/vampirrePoints

根据要求,一个不起作用的JSFiddle:http://jsfiddle.net/farfromunique/mS4Lp/

注意:菜单错误,没有正确前进,并且没有“点”(复选框)可点击,因此功能无法测试。我强烈怀疑我的代码不是跨浏览器兼容的,但这对我来说并不是优先考虑的事情。

1 个答案:

答案 0 :(得分:0)

解决方案:在函数freebieDotSetup()中,我这样做:

for (i=0;i<attributeDots.length;i++) {
    attributeDots[i] = allDots[i];
}
...
for (i=0;i<abilityDots.length;i++) {
    abilityDots[i] = allDots[i+attributeDots.length];
}
...
for (i=0;i<disciplineDots.length;i++) {
    disciplineDots[i] = allDots[i+abilityDots.length];
}
...

由于我使用的是前一组的长度,因此偶尔会覆盖以前的值(由于组更短)。我用这个纠正了这个:

startPos = startPos + attributeDots.length;

for (i=0;i<abilityDots.length;i++) {
    abilityDots[i] = allDots[i+startPos];
}

每次将前一组的长度添加到startPos。进行此更改解决了我的问题。

......但JSFiddle仍然完全被破坏了。