簡體   English   中英

如何將事件偵聽器添加到原型內動態創建的元素中?

[英]How to add event listener to element created dynamically within prototype?

HTML

<div id="main"></div>

JS

var TestClass = function() {};
TestClass.prototype = {
    addElement: function(parentId) {
    var parent = document.querySelector('#' + parentId);
    var a = document.createElement('a');
    a.textContent = '+';
    a.href = '#';
    a.addEventListener('click', this.onElementClick, false); //nothing happens on click
    parent.innerHTML = a.outerHTML;
  },

  onElementClick: function() {
    console.log('dynamic element clicked');
  }
};

new TestClass().addElement('main'); // on DOM ready

產量

<div id="main"><a href="#">+</a></div>

您正確地添加了事件監聽器,但是卻忘記了添加元素。

我已經將document.body.append(a)添加到addElement方法中。

這將導致以下代碼:

var TestClass = function() {};
TestClass.prototype = {
    addElement: function(parentId) {
    var parent = document.querySelector('#' + parentId);
    var a = document.createElement('a');
    a.textContent = '+';
    a.href = '#';
    a.addEventListener('click', this.onElementClick, false);
    document.body.append(a);
    parent.innerHTML = a.outerHTML;
  },

  onElementClick: function() {
    console.log('dynamic element clicked');
  }
};

new TestClass().addElement('main'); // on DOM ready

在這里測試

像這樣:

 var TestClass = function() {}; TestClass.prototype = { addElement: function(parentId) { var parent = document.getElementById(parentId); //Changed to getElementById var a = document.createElement('a'); a.textContent = '+'; a.href = '#'; a.addEventListener('click', this.onElementClick, false); parent.append(a); //Changed }, onElementClick: function() { console.log('dynamic element clicked'); } }; new TestClass().addElement('main'); // on DOM ready 
 <div id="main"></div> 

您沒有將a添加到parent ,而是添加了它的HTML。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM