一个javascript函数禁用其他函数

一个javascript函数禁用其他函数,javascript,innerhtml,Javascript,Innerhtml,我有3个功能: window.onload = function() { canvas(); changeColor(); blockSize(); } 问题在于第三个“blockSize()。当我把它放在窗口底部时,它没有运行。onlod函数;+当我把它放在顶部时,它会禁用它下面的所有功能。下面是代码(以类名为“size”的所有块的百分比计算宽度和高度): 注意,当我添加child(最后一行)时,这个问题出现了。当我删除它时,其他功能正常工

我有3个功能:

window.onload = function() {       
    canvas();   
    changeColor();
    blockSize();    
}
问题在于第三个“blockSize()。当我把它放在窗口底部时,它没有运行。onlod函数;+当我把它放在顶部时,它会禁用它下面的所有功能。下面是代码(以类名为“size”的所有块的百分比计算宽度和高度):

注意,当我添加child(最后一行)时,这个问题出现了。当我删除它时,其他功能正常工作。还尝试手动将放入div中,并改用此javascript行(结果相同):

!!!当我只使用innerHTML时,一切正常。我明白,我可以使用这样的东西,它会起作用:

block[i].innerHTML = "<span>"+width+"x"+height+"</span>";
block[i].innerHTML=“”+宽度+“x”+高度+”;

问题很可能是由于在HTMLCollection上不正确地使用
for in
。这将包括DOM元素之外的其他项

当它遇到
block[i].appendChild(span)
时,如果
block[i]
不是元素,因此没有
.appendChild()
方法,它将抛出错误

改为使用
for
循环

function blockSize() {
    var block = document.getElementsByClassName("size");    
    for (var i = 0; i < block.length; i++) {       
        var width = Math.round(block[i].clientWidth/document.documentElement.clientWidth*100);
        var height = Math.round(block[i].clientHeight/document.documentElement.clientHeight*100);
        var span = document.createElement("span");
        span.innerHTML = width+"x"+height+"%";
        block[i].appendChild(span);
    }    
}
函数块大小(){
var block=document.getElementsByClassName(“大小”);
对于(var i=0;i
您检查过控制台是否有错误吗?您能发布完整的代码(其他功能)吗?这个问题似乎离题了,因为这是一个问题,如果OP只看一下控制台就可以解决。这是控制台代码,它没有告诉我,该问题在循环中:
uncaughttypeerror:无法设置未定义的
基本调试的属性“innerHTML”。根据错误消息,在调试器中快速插入
console.log(block[i])
或断点以查看内容会显示您正在迭代不想迭代的内容,然后,至少,你可以在你的问题中包含更多关于这个问题的信息,或者你自己也可以看到发生了什么。了解基本的调试步骤非常重要,这样您就可以检查受影响区域内的情况。谢谢,问题已经解决。没想到问题会出现在中。在接下来的所有时间里,我们将只使用
For
循环。@Mark1ra:是的,在JS中处理数组或类似数组的对象时,最好使用
For
。这是一个经典的例子,说明了为什么永远不应该使用For/in来迭代数组。
block[i].innerHTML = "<span>"+width+"x"+height+"</span>";
function blockSize() {
    var block = document.getElementsByClassName("size");    
    for (var i = 0; i < block.length; i++) {       
        var width = Math.round(block[i].clientWidth/document.documentElement.clientWidth*100);
        var height = Math.round(block[i].clientHeight/document.documentElement.clientHeight*100);
        var span = document.createElement("span");
        span.innerHTML = width+"x"+height+"%";
        block[i].appendChild(span);
    }    
}