包装的可点击 DivElement:事件未被监听
Wrapped clickable DivElement : event isn't listened
请考虑下面的小代码:
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
值实际上是一个提醒“已点击!”的函数。当最终用户点击此 HTML 元素时。
但是没用。当我检查源代码时,似乎 属性 onclick
没有添加到这个 HTML 元素中。
你知道为什么以及如何解决这个问题吗?
document.body.innerHTML += this.html_element.outerHTML;
是问题所在。这几乎是向页面添加元素的最糟糕的方式。
您的处理程序与 HTML 无关,因此当您使用 outerHTML
调用将元素序列化为 HTML 时,它会丢失。更不用说你正在序列化和销毁 所有 document.body
下的节点,然后将它们变回新节点,这将使它们丢失处理程序和其他数据.
而是使用 .appendChild()
添加元素节点:
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);
};
}
请考虑下面的小代码:
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
值实际上是一个提醒“已点击!”的函数。当最终用户点击此 HTML 元素时。
但是没用。当我检查源代码时,似乎 属性 onclick
没有添加到这个 HTML 元素中。
你知道为什么以及如何解决这个问题吗?
document.body.innerHTML += this.html_element.outerHTML;
是问题所在。这几乎是向页面添加元素的最糟糕的方式。
您的处理程序与 HTML 无关,因此当您使用 outerHTML
调用将元素序列化为 HTML 时,它会丢失。更不用说你正在序列化和销毁 所有 document.body
下的节点,然后将它们变回新节点,这将使它们丢失处理程序和其他数据.
而是使用 .appendChild()
添加元素节点:
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);
};
}