Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript事件只循环一次,没有输出_Javascript_Html_Dom_Javascript Events - Fatal编程技术网

Javascript事件只循环一次,没有输出

Javascript事件只循环一次,没有输出,javascript,html,dom,javascript-events,Javascript,Html,Dom,Javascript Events,我正在编写一个JS代码来计算给定一些单独等级的最终等级,并在html页面中输出结果,但是当我触发事件和函数时,它在我的for循环中只循环一次,而没有到达我使用print语句检查的代码的其余部分,但我不明白造成其余部分的循环有什么问题无法访问代码 HTML: JS: 数组值从0开始。尝试i=0和i您的代码中有两个问题 第一: 对于var i=1;JavaScript中的节点列表和数组都是零索引的,它们的最后一个元素的长度为-1。因此,需要对循环进行修改 for (var i=0; i<lis

我正在编写一个JS代码来计算给定一些单独等级的最终等级,并在html页面中输出结果,但是当我触发事件和函数时,它在我的for循环中只循环一次,而没有到达我使用print语句检查的代码的其余部分,但我不明白造成其余部分的循环有什么问题无法访问代码

HTML:

JS:


数组值从0开始。尝试i=0和i您的代码中有两个问题

第一:


对于var i=1;JavaScript中的节点列表和数组都是零索引的,它们的最后一个元素的长度为-1。因此,需要对循环进行修改

for (var i=0; i<list.length; i++)
// or
for (var i=0; i<=list.length-1; i++) // uncommon

仅访问列表中存在的项目。否则,它们将导致未定义,并且访问其value属性会引发异常,该异常会停止整个函数,因此不会得到任何输出。您应该能够在您的中看到异常。

我查看了答案,似乎没有人对此有主要问题。。。因此:

...
for (var i=0; i <= list.length-1; i++)
{
    if(list[i].type == "text")
    {
        if (i%2 == 0)
        marks += parseInt(list[i].value);
        else
        total += parseInt(list[i].value);
    }
}
var result = Math.round(parseFloat(marks / total)*100);
...

您没有将值解析为int,这意味着它们是串联的,而不是添加的。。。。然后你对一些本来是0-1的东西进行整数除法,取整后总是0或1,所以我先乘以100。。。还有您的i%2!=0正在分配错误的变量,因此我更改了它。。下面是一个JSFIDLE演示它的工作原理

为什么要从i=1迭代到i=list.length,而不是从i=0迭代到i=list.length-1?我认为这是一个索引问题,所以我尝试将其切换到其他位置,但没有原因,应该从0开始。您是否有机会对此进行测试,tarek?我知道索引关闭了,我只是在试验,忘了恢复值,但我修复了它和appendChild,但仍然没有输出:/n没有输出是什么意思?
for (var i=0; i<list.length; i++)
// or
for (var i=0; i<=list.length-1; i++) // uncommon
...
for (var i=0; i <= list.length-1; i++)
{
    if(list[i].type == "text")
    {
        if (i%2 == 0)
        marks += parseInt(list[i].value);
        else
        total += parseInt(list[i].value);
    }
}
var result = Math.round(parseFloat(marks / total)*100);
...