為jQuery動態新增的Elements綁定事件
經常會用到 JQuery (append、prepend) 動態方式產生元件進行控制,若有綁定事件在原先的item上,新增的item會無法被事件所控制。
簡單的範例,點擊 div 方塊會產生一個console.log
而點擊 "add new" 按鈕時產生一個新的div方塊(append)
Html
1
2
3
4
|
<div id= "main" style= "padding:20px;margin-bottom:100px;" > <div class= "item" >Default</div> </div> <input value= "add new" type= "button" > |
Javascript
1
2
3
4
5
6
7
8
9
10
11
|
<script> //點擊item 輸出一個log text $( '.item' ).on( 'click' , function (){ console.log( 'Clicked' ); }); //點擊按鈕動態產生一個div方塊 $( ':button' ).on( 'click' , function (){ var item = '<div class="item">New</div>' ; $( '#main' ).append(item); }); </script> |
點擊 Default 時會輸出console.log,但透過按鈕產生的 New 卻無法輸出log
若要讓動態產生的 div 方塊也支援 Click 事件,Javascript的部分改成:
1
2
3
4
5
6
7
8
9
10
11
|
<script> //綁定的物件改為item的父層元素$('#main'),若沒有父層可直接綁定$(document)即可 $( '#main' ).on( 'click' , '.item' , function (){ console.log( 'Clicked' ); }); //點擊按鈕動態產生一個div方塊 $( ':button' ).on( 'click' , function (){ var item = '<div class="item">New</div>' ; $( '#main' ).append(item); }); </script> |
這樣一來動態產生的物件也可以支援 Click 事件了
其他的事件一樣也適用。
增加click事件按下後彈跳一則簡短的訊息
原本的寫法如下:
1
2
3
|
$( '#addCancel' ).click( function () { alert( 'Click事件沒有問題' ); }); |
但Click事件始終沒有效果,原來動態新增的elements要綁定事件需要用.on的方式
1
2
3
|
$( 'body' ).on( "click" , '#addCancel' , function () { alert( '用on綁定就沒有問題!!' ); }); |
參考資料
http://toyo0103.blogspot.tw/2013/04/jqueryelements-jquery-on.html
http://ccckaass.pixnet.net/blog/post/146092931-%5Bjquery%5D-%E5%8B%95%E6%85%8B%E7%94%A2%E7%94%9F%E7%89%A9%E4%BB%B6%28append%29%E7%9A%84-event-%E6%8E%A7%E5%88%B6%28click%29