未捕获的TypeError:无法设置未定义的javascript属性'backgroundColor'

时间:2016-07-05 00:14:09

标签: javascript

我正在创建一个HTML音乐制作程序。我目前正在处理笔记系统,当你点击一个笔记时,它会将颜色切换为黑色。但是,当我使用我的Javascript函数时,它会显示错误Uncaught TypeError: cannot set property 'backgroundColor' of undefined

<小时/> 这是我的Javascript。它是不完整的,但如果有人可以提供帮助,那就太好了。

var pattern = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
function switchNote(num, note) {
	var trId = document.getElementsByTagName("tr")[note + 8].id;
	pattern[num] = note;
	document.getElementById(trId).lastChild.style.backgroundColor = "#000";
	return "switched";
}

2 个答案:

答案 0 :(得分:1)

它表示.lastChild不是DOM 元素.nodeType1的节点。 lastChild是textNode或commentNode,它没有style属性。

您可以使用lastElementChild属性获取最后一个元素。

另一种选择是使用.children属性:

var children = [].slice.call(element.children);
var last = children[children.length - 1];
// for getting the last 2 children of the element:
// var last2 = children.slice(-2);

请注意,如果document.getElementsByTagName("tr")[note + 8]返回目标元素,则无需使用document.getElementById方法重新查询DOM。 ID必须是唯一的,并且读取元素的.id属性以便.getElementById再次获取它并没有多大意义。

答案 1 :(得分:0)

试试这个:

&#13;
&#13;
var pattern = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
function switchNote(num, note) {
	var trId = document.getElementsByTagName("tr")[note + 8].id;
	pattern[num] = note;
	document.getElementById(trId).children[document.getElementById(trId).children.length].style.backgroundColor = "#000";
	return "switched";
}
&#13;
&#13;
&#13;