请考虑以下几点代码:
function Movable(x, y, width, height, background_color) {
this.html_element = document.createElement("div");
this.html_element.onclick = this.move;
this.move = function() {
alert("Clicked !");
};
this.display = function() {
document.body.innerHTML += this.html_element.outerHTML;
};
}
我试图添加HTML属性" onclick"用" move();"作为价值。这个move
值实际上是一个警告" Clicked!"当最终用户点击此HTML元素时。
但它不起作用。当我检查源代码时,似乎不会将属性onclick
添加到此HTML元素中。
你知道为什么以及如何解决这个问题吗?
答案 0 :(得分:7)
document.body.innerHTML += this.html_element.outerHTML;
是问题所在。这只是向网页添加元素的最糟糕方式。
您的处理程序与HTML无关,因此当您使用outerHTML
调用将元素序列化为HTML时,它会丢失。更不用说您在document.body
下序列化并销毁所有节点,然后将它们重新转换为新节点,这将使它们失去处理程序和其他数据。
相反,只需使用.appendChild()
添加Element节点:
document.body.appendChild(this.html_element)
此外,您在创建之前将this.move
指定为处理程序,除非有undefined
,否则只会指定Movable.prototype.move
用处理程序。
function Movable(x, y, width, height, background_color) {
this.html_element = document.createElement("div");
this.move = function() {
alert("Clicked !");
};
this.html_element.onclick = this.move;
this.display = function() {
document.body.appendChild(this.html_element);
};
}