JQuery:動態添加標籤綁定事件

說明

採用JQuery技術先獲取頁面元素,然後再在後面追加元素的時候(append),在下面用 $(selector) 獲取剛剛添加的標籤,發現怎麼都獲取不到。

之所以這樣原因是因爲頁面已經將JS加載完畢,此時新增請求動態添加節點,自然獲取不到。

動態添加的標籤要事件委託才能獲取到節點,具體解決辦法:

  • 通過on綁定事件(注意使用on綁定事件時,hover無效,因爲on的參數只能傳一個函數)
  • live綁定:
  • delegate綁定:

語法:
$(selector1).on(events,[selector2],[data],fn)

參數 描述
events 一個或多個用空格分隔的事件類型和可選的命名空間
selector2 可選。一個選擇器字符串,用以過濾選定的元素,該選擇器的後裔元素將調用處理程序。如果選擇是空或被忽略,當它到達選定的元素,事件總是觸發。
data 可選。作爲event.data屬性值傳遞給事件對象的額外數據對象以供事件處理函數處理
fn 該事件被觸發時執行的函數。 false值也可以做一個函數的簡寫,返回false

注意

  • selector1 爲動態添加節點的父級節點,請使用非動態添加的父級節點,不然同樣獲取不到。
  • 請委託給直接上級非動態添加節點,不要擴大範圍,否則可能會造成一次點擊多次執行情況!

示例

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div id="sth1"><button id="btn1">btn1</button></div>
        <div id="sth2"></div>
        <div id="sth3"></div>

        <script src="jquery/jquery-2.1.1.min.js"></script>
        <script type="text/javascript">
            $("#btn1").click(function () {//能正常觸發事件
                alert("btn 111");
            });
            $(function () {
                $("#sth2").append('<button id="btn2">btn2</button>');
                $("#sth3").append('<button id="btn3">btn3</button>');
            });

            $("#btn2").click(function () {//不能正常觸發事件
                alert("btn 222");
            });
            $("#sth3").on("click","#btn3",function () {//能正常觸發事件
                alert("btn 333");
            });
        </script>
    </body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章