js動態添加的元素綁定事件


最近做的項目要實現一個動態添加動態刪除的功能,思考了一下,該怎么給動態添加的元素綁定事件。最后覺得有兩種方式比較可靠,第一種是在動態添加的html代碼里添加oclick事件,然后給傳個唯一的參數來判斷點擊了哪個,然后做相應的操作,第二種是通過事件委托的原理來處理,事件委托將一個事件偵聽器實際綁定到整個容器,然后在單擊它時能夠訪問每個列表項,這種更高效一些

具體的代碼實現如下:

第一:onclick

 1 <body>
 2     <button onclick="AddJob()">添加工作經歷</button>
 3     <button onclick="GetJobs()">獲取全部工作</button>
 4 
 5     <div id="joblist">
 6         <div id="job1" class="job">
 7             <input name="CompanyName" type="text" value="公司1" />
 8             <button onclick="DelJob(1)">刪除</button>
 9         </div>
10     </div>
11     <script type="text/javascript">
12         //添加工作經歷
13         function AddJob() { 14             var timestamp = parseInt((new Date()).valueOf()); //唯一的標識 15             console.log(parseInt((new Date()).valueOf())); 16             document.getElementById("joblist").innerHTML +=
17                 `<div id="job` + timestamp + `" class="job">
18                      <input name="CompanyName" type="text" value="公司` + timestamp + `" />
19                      <button onclick="DelJob(` + timestamp + `)">刪除</button>
20                  </div>`;
21  } 22         //刪除工作經歷
23         function DelJob(timestamp) { 24             document.getElementById("job" + timestamp).remove(); 25  } 26         //獲取全部工作經歷
27         function GetJobs() { 28             var jobs = document.getElementsByClassName("job"); 29             var arr = []; 30             for (var i = 0; i < jobs.length; i++) { 31                 var job = jobs[i]; 32                 var companyName = job.children[0].value; 33  arr.push(companyName); 34  } 35  console.log(arr); 36  alert(arr); 37  } 38     </script>
39 </body>

第二種:事件委托

1 document.getElementById('joblist').addEventListener('click', function (ev) { 2         var target = ev.target || ev.srcElement; 3         if (target.nodeName.toLowerCase() == 'button') { 4             var e = document.getElementById(target.parentNode.id); 5             document.getElementById("joblist").removeChild(e); 6  } 7     });

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM