[英]Click event handler not persisting for dynamically created checkboxes
我有一个Javascript脚本,其中定义了一个称为“图层”的类。 我将代码放入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();
}
});
};
您应该使用$(document).on('click','#layer'+ this.name,function(){...}),它通常与动态添加的HTML一起使用。
innerHTML存在此问题。 如果使用Document.create方法创建动态元素,我认为将附加侦听器。 无论如何,您都可以将evenListener放在类似addEventListenerToBeer()的函数中,并在innerHTML调用之后进行调用。
var d = document.createElement("div")
var t = document.createTextNode("i like beer");
d.id = "myId";
d.appendChild(t);
您需要更换:
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>';
对于:
let element="";
//****
element = '</br>' +
'<div class="ui toggle mini checkbox" id="layer' + this.name +'">' +
'<input type="checkbox" name="' + this.name + '" checked>' +
'</input>' +
'<label>' + this.name + '</label>' +
'</div>';
$(element).appendTo(layerDiv);
appendTo插入元素并使它们成为要查询的DOM的一部分...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.