如果我點擊第一個「編輯」我得到一個console.log('click happend')
但如果我通過JavaScript添加這些框中的一個(點擊「添加框」),然後編輯click
從這新箱子不起作用。我知道這是因爲javascript在元素不存在的情況下運行,這就是爲什麼沒有click事件監聽器的原因。我也知道用jQuery我能做到像這樣:添加點擊事件到元素插入javascript
$('body').on('click', '.edit', function(){ // do whatever };
而且是可行的。
但是我怎樣才能用純Javascript來做到這一點?我找不到任何有用的資源。創建了一個我想要工作的簡單例子。解決這個問題的最好方法是什麼?
所以問題是:如果你添加一個框,然後點擊「編輯」,什麼都不會發生。
var XXX = {};
XXX.ClickMe = function(element){
this.element = element;
onClick = function() {
console.log('click happend');
};
this.element.addEventListener('click', onClick.bind(this));
};
[...document.querySelectorAll('.edit')].forEach(
function (element, index) {
new XXX.ClickMe(element);
}
);
XXX.PrototypeTemplate = function(element) {
this.element = element;
var tmpl = this.element.getAttribute('data-prototype');
addBox = function() {
this.element.insertAdjacentHTML('beforebegin', tmpl);
};
this.element.addEventListener('click', addBox.bind(this));
};
[...document.querySelectorAll('[data-prototype]')].forEach(
function (element, index) {
new XXX.PrototypeTemplate(element);
}
);
[data-prototype] {
cursor: pointer;
}
<div class="box"><a class="edit" href="#">Edit</a></div>
<span data-prototype="<div class="box"><a class="edit" href="#">Edit</a></div>">Add box</span>
This Q/A is useful information但它不回答我有關如何解決這個問題的問題。就像我如何爲那些動態插入DOM的元素調用eventListener(s),如new XXX.ClickMe(element);
?
的可能的複製[什麼是DOM事件代表團?](https://stackoverflow.com/questions/1687296/what-is-dom-event-delegation ) –