<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何實(shí)現(xiàn)動(dòng)態(tài)添加的元素添加點(diǎn)擊事件

          共 2976字,需瀏覽 6分鐘

           ·

          2021-10-26 10:40


          在頁(yè)面開發(fā)過(guò)程中常常遇到需要?jiǎng)討B(tài)添加元素,然后給這一元素綁定相關(guān)事件的情況,這種情況下一般需要給元素加上相關(guān)屬性,然后寫這些元素的事件函數(shù)即可。動(dòng)態(tài)添加的元素怎么綁定事件呢?

          原生JavaScript

          原生JavaScript主要有2種實(shí)現(xiàn)方式,第一種是在動(dòng)態(tài)添加的html代碼中添加oclick事件,然后傳遞一個(gè)唯一的參數(shù)來(lái)判斷點(diǎn)擊的是哪個(gè),然后做相應(yīng)的操作。 
          第二種是通過(guò)事件委托的原理進(jìn)行處理,事件委托將一個(gè) 事件監(jiān)聽器實(shí)際上綁定到整個(gè)容器,然后每個(gè)列表項(xiàng)被點(diǎn)擊就可以訪問(wèn),這樣效率更高。
          具體的代碼實(shí)現(xiàn)如下:

          第一:onclick

          <body>  <button onclick="AddJob()">添加工作經(jīng)歷</button>  <button onclick="GetJobs()">獲取全部工作</button>   <div id="joblist">    <div id="job1" class="job">      <input name="CompanyName" type="text" value="公司1" />      <button onclick="DelJob(1)">刪除</button>    </div>  </div>  <script type="text/JavaScript">    //添加工作經(jīng)歷    function AddJob() {var timestamp = parseInt((new Date()).valueOf()); //唯一的標(biāo)識(shí)      console.log(parseInt((new Date()).valueOf()));      document.getElementById("joblist").innerhtml +=        `<div id="job` + timestamp + `" class="job">           <input name="CompanyName" type="text" value="公司` + timestamp + `" />           <button onclick="DelJob(` + timestamp + `)">刪除</button>         </div>`;    }    //刪除工作經(jīng)歷    function DelJob(timestamp) {      document.getElementById("job" + timestamp).remove();    }    //獲取全部工作經(jīng)歷    function GetJobs() {var jobs = document.getElementsByClassName("job");      var arr = [];      for (var i = 0; i < jobs.length; i++) {        var job = jobs[i];        var companyName = job.children[0].value;        arr.push(companyName);      }      console.log(arr);      alert(arr);    }</script></body>

          第二種addEventListener:

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

          jquery實(shí)現(xiàn)

          從 jQuery 1.7 開始,您應(yīng)該使用on的方式,語(yǔ)法如下:

          $(staticAncestors).on(eventName, dynamicChild, function() {});

          解釋:

          這稱為事件委托,其工作原理如下。該事件附加到staticAncestors應(yīng)處理的元素的靜態(tài)父級(jí) ( )。

          每次在此元素或后代元素之一上觸發(fā)事件時(shí),都會(huì)觸發(fā)此 jQuery 處理程序。

          然后處理程序檢查觸發(fā)事件的元素是否與您的選擇器 ( dynamicChild)匹配。當(dāng)匹配時(shí),您的自定義處理程序函數(shù)將被執(zhí)行。


          在此之前,推薦的方法是使用live():

          $(selector).live( eventName, function(){} );

          然而,live()在 1.7 中被棄用on(),而在 1.9 中被完全刪除。

          $(selector).live( eventName, function(){} );

          可以替換為以下on()方法:

          $(document).on( eventName, selector, function(){} );

          例如,如果您的頁(yè)面使用類名動(dòng)態(tài)創(chuàng)建元素,dosomething您會(huì)將事件綁定到已經(jīng)存在的父級(jí)(這是這里問(wèn)題的核心,您需要綁定到存在的東西,不要綁定到動(dòng)態(tài)內(nèi)容),這可以(也是最簡(jiǎn)單的選項(xiàng))是document. 盡管記住document可能不是最有效的選擇。

          $(document).on('mouseover mouseout', '.dosomething', function(){    // what you want to happen when mouseover and mouseout     // occurs on elements that match '.dosomething'});

          事件綁定時(shí)存在的任何父級(jí)都可以。例如

          $('.buttons').on('click', 'button', function(){    // do something here});

          將適用于

          <div>    <!-- <button>s that are generated dynamically and added here --></div>

          本文完


          學(xué)習(xí)更多技能

          請(qǐng)點(diǎn)擊下方公眾號(hào)

          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美色图小说 | 精品在线99 | 91在线无码精品秘 入口色 | 自拍影音先锋 | 婷婷丁香五月综合 |