【发布时间】:2016-11-06 21:14:53
【问题描述】:
我正在尝试更改使用 JavaScript 创建的元素的颜色。此元素中的信息是根据数据库中的数据填充的。
var done = orders[i][2];
var id = orders[i][0];
id_and_name = JSON.stringify(id_and_name);
content = content + "<div onClick='loadOrder("+id_and_name+")' class='btn btn-lg btn-info'
id= '"+id+"'><span class='glyphicon glyphicon-shopping-cart'></span>
ID: "+orders[i][0]+"</br>Name: " + orders[i][1]+"</div>";
if (done == 0){
alert("order not done");
document.getElementById(id).style.color = "red";
alert(id);
}else{
alert("order done");
document.getElementById(id).style.color = "green";
alert(id);
}
document.getElementById("main_content").innerHTML = content;
当我删除 document.getElementById 行并通过相应的分支运行时,代码可以正常工作。当我包含这些行时,我收到一个语法错误:VM882:125 Uncaught TypeError: Cannot read property 'style' of null(...)。
我不能以这种方式更改使用 javascript 创建的元素的颜色吗?如果不是为什么?,我应该使用什么方法。
我还用 alert(id) 检查了 id 的值,它们很好。两者都是字符串,例如:“43”和“44”。我也尝试替换 document.getElementById(id).style.color = "red"; with document.getElementById("43").style.color = "red";我得到同样的错误。当我删除该行时,将使用正确的 ID 创建元素,但当然我不能更改颜色。
【问题讨论】:
-
该错误表明
document.getElementById(id)没有返回任何内容(它为空)。因此,您需要仔细检查您是否有一个 id 与id变量相同的元素。 -
您也可以只添加一个带有 html 样式属性的字符串,该属性包含元素的 css 到您要添加的 html 字符串中。
-
为什么要在创建元素后对其进行着色,而在创建元素时已经拥有了为它着色所需的所有信息?你无缘无故地跳槽。只需在创建元素时添加适当的样式(即使用类)。但是问题是您实际上并未在任何地方添加
content到文档中,因此您的新div实际上并不存在 -
您还没有将元素插入到 DOM 中,因此您无法使用
getElementById获取它。如果您开始使用createElement创建实际元素而不是使用字符串和内联 javascript,这会容易得多。 -
啊,以后会这样。有了这个。 document.getElementById("main_content").innerHTML = content;我已经重新订购了。它有效。我应该删除这篇文章还是可以接受该评论作为答案?
标签: javascript jquery