【发布时间】:2016-08-02 22:33:00
【问题描述】:
我有一个 Javascript 脚本,我在其中定义了一个名为“Layer”的类。我将代码放在Layer 构造函数中,这样每次创建一个新的Layer 对象时,都会将与该层关联的复选框添加到HTML 文档中。我还在构造函数中创建了一个 JQuery 事件处理程序,以便在单击新复选框时,根据复选框的状态在文档中显示或隐藏图层。然而,由于某种原因,事件处理程序仅适用于最近创建的层。不知何故,旧的事件处理程序正在被覆盖。我在这里搜索了类似的问题,发现使用 JQuery 中的 on 函数而不是 click 是可行的方法,但我仍然遇到同样的问题。这是我的代码...
Layer2D.prototype.addToUI = function() {
if (this.firstLayer()) {
var layerDiv = document.createElement('div');
layerDiv.className = 'content';
layerDiv.id = 'layerNames';
}
else {
var layerDiv = document.getElementById('layerNames');
}
layerDiv.innerHTML += '</br>' +
'<div class="ui toggle mini checkbox" id="layer' + this.name +'">' +
'<input type="checkbox" name="' + this.name + '" checked>' +
'</input>' +
'<label>' + this.name + '</label>' +
'</div>';
if (this.firstLayer()) {
var parentDiv = document.getElementById('layerMenu');
parentDiv.appendChild(layerDiv);
};
$('#layer' + this.name).after('<br/>');
var This = this;
$('#layer' + this.name).on('click', ':input', function(e) {
checked = $(this).is(':checked');
console.log(This);
if (checked === true) {
This.show();
}
else {
This.hide();
}
});
};
【问题讨论】:
-
@MikeMcCaughan 我不这么认为。那里的解决方案是使用我已经在这里使用的 JQuery
on()方法。 -
请阅读完整答案。它讨论了事件委托,使用
on的三个参数。 -
我做到了,但我仍然对它如何应用在这里有一个模糊的概念。我认为我的问题(从答案看来是与 innerHTML 相关的)与该问题中的问题足够不同,足以保证它自己的帖子。
标签: javascript jquery