首頁  >  問答  >  主體

動態建立的元素上的事件綁定?

<p>我有一些程式碼,我循環遍歷頁面上的所有選擇框並將<code>.hover</code> 事件綁定到它們,以在<code> 滑鼠上調整它們的寬度開啟/關</code>。 </p> <p>這發生在頁面準備好並且正常運作。 </p> <p>我遇到的問題是,在初始循環之後透過 Ajax 或 DOM 新增的任何選擇框都不會綁定事件。 </p> <p>我已經找到了這個插件(jQuery Live Query Plugin),但是在我使用插件向我的頁面添加另一個5k 之前,我想看看是否有人知道如何做到這一點,無論是直接使用jQuery還是透過其他選項。 </p>
P粉440453689P粉440453689444 天前433

全部回覆(2)我來回復

  • P粉930534280
  • P粉547170972

    P粉5471709722023-08-24 11:57:21

    從 jQuery 1.7 開始,您應該使用 jQuery.fn.on 並填入了選擇器參數:

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

    說明:

    這稱為事件委託,其工作原理如下。此事件附加到應處理的元素的靜態父級 (staticAncestors)。每次在此元素或後代元素之一上觸發事件時,都會觸發此 jQuery 處理程序。然後,處理程序檢查觸發事件的元素是否與您的選擇器 (dynamicChild) 相符。當存在匹配時,就會執行您的自訂處理程序函數。


    在此之前,建議的方法是使用 live()< /代码>

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

    但是,live() 在 1.7 中已被棄用,取而代之的是 on(),並在 1.9 中完全刪除。 live() 簽章:

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

    ...可以替換為以下 on()簽章:

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

    例如,如果您的頁面動態建立具有類別名稱dosomething 的元素,您可以將該事件綁定到已經存在的父級(這是該事件的核心)這裡的問題是,你需要一些存在的東西來綁定,而不是綁定到動態內容),這可以是(也是最簡單的選項)是document。但請記住 document 可能不是最有效的選擇

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

    事件綁定時存在的任何父級都可以。例如

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

    適用於

    <div class="buttons">
        <!-- <button>s that are generated dynamically and added here -->
    </div>

    回覆
    0
  • 取消回覆