未捕获的TypeError:无法设置undefined的属性'onClick'

时间:2016-07-05 05:40:38

标签: javascript

我正在研究HTML音乐创作者。每次运行JavaScript函数时,我都会收到一个错误,从onClick标记的第八个元素开始向每个td元素添加td属性。我收到错误:

  

“未捕获的TypeError:无法设置未定义的属性'onClick'。”

这是我的JavaScript:

function addOnclick() {
    var num = 1;
    var note = 0;
    i = 8;
    while (i < (17 * 12) + 8 + 1) {
    document.getElementsByTagName("td")[i].onClick = "switchNote(" + num + ", " + note + ")";
        if (i == 25 || i == 42 || i == 59 || i == 76 || i == 81 || i == 98 || i == 115 || i == 132 || i == 149 || i == 166 || i == 183 || i == 200 || i == 217) {
            note = note + 1;
            num = 1;
        }
        i = i + 1;
        num = num + 1;
        console.log("working");
    }
}

如果您有任何想法,请帮忙!

谢谢,
T。

2 个答案:

答案 0 :(得分:1)

两件事,

  1. 您需要检查元素是否存在(没有标记很难判断)。
  2. 尝试类似

    的内容
    var element = document.getElementsByTagName("td")[i];
    element && element.onclick = function(){
        switchNote( num, note )
    };
    
    1. onclick处理程序的值不能是字符串,它必须是函数。

答案 1 :(得分:0)

您应该使用OnClick而不是将值分配给setAttribute,并检查元素是否已定义,如下所示:

function addOnclick() {
    function addOnclick() {
        var num = 1;
        var note = 0;
        i = 8;
        while (i < (17 * 12) + 8 + 1) {
            var elem = document.getElementsByTagName("td")[i];
            if (elem)
            {
                elem.setAttribute('onclick', "switchNote(" + num + ", " + note + ")")
            }

            if (i == 25 || i == 42 || i == 59 || i == 76 || i == 81 || i == 98 || i == 115 || i == 132 || i == 149 || i == 166 || i == 183 || i == 200 || i == 217) {
                note = note + 1;
                num = 1;
            }
            i = i + 1;
            num = num + 1;
            console.log("working");
        }
    }
}