但這個class名稱的事件就是不執行!
原因就是因為這個元素是動態新增的,事件沒有被綁定在元素上面,
於是我就上PTT問問題,被前輩指點了on這個事件
這個事件真的是簡潔有力,幾乎不會改太多就可以解決了
先來看看on事件解決問題demo
從上面那個網頁看的出來,on事件能增能刪,一般的click事件後來新增的不能刪
所以on事件做的就是重新指派事件給元素
怕以後忘記,先來輩份一下程式碼
原本:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8;"/> <title>怎麼辦?</title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script> <script type="text/javascript" src="include_js/jquery.blockUI.js"></script> <script type="text/javascript"> $(document).ready(function(){ //先賦與圖片函數 change_bg('img1'); change_bg('img2'); //把點的圖片顯示在block裡面 $('.img').click(function(){ var img=document.createElement('img'); img.setAttribute('src',$(this).attr('src')); img.setAttribute('class',$(this).attr('data')); $('#inner').html(img); change_bg($(this).attr('data')); }); }); //函數 function change_bg(id){ $('.'+id).click(function(){ alert('.'+id); }); } //觸發BLOCK $(function(){ $('.img').click(function(){ $.blockUI({ message: $('#block'), //要彈跳出的元素box css: { //弹出元素的CSS属性 marginLeft: '-250px', marginTop: '-300px', height:'auto', overflow:'auto', width:'400px', height:'400px', } }); $('.blockOverlay').attr('title','單擊關閉').click($.unblockUI); //遮罩層屬性的設置以及當鼠標單擊遮罩層可以關閉彈出層 $('#shop-btn1').click($.unblockUI); //也可以自定義一個關閉按鈕來關閉彈出層 }); }); </script> </head> <body> <img src="img/line.jpg" class="img img1" data="img1"/> <img src="img/line2.jpg" class="img img2" data="img2" /> <div> <p>先點↑,會alert一次,block跳出裡面的圖也可以alert,圖層關掉後,再點會alert兩次</p> <p>裡面的依然也可以alert,但外面的會一直+1次...要怎麼寫可以解決這個問題</p> <p>我只想要外面跟裡面alert各一次就好</p> <p>註:</p> <p>class='img'是觸發block</p> <p>原本是要做切換背景的,因為速度太快會看不出來問題點,所以用alert代替</p> <p>先謝謝試著來幫我解決問題的人</p> </div> <div id="block" style="display:none;"> <div id="inner"></div> </div> </body> </html>
加上on事件解決問題:
1.首先改:
//函數 function change_bg(id){ $(document).on('click','.'+id,function(event){ alert('.'+id); }); }
2.刪除:
change_bg($(this).attr('data'));
修改後的完整程式碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8;"/> <title>怎麼辦?</title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script> <script type="text/javascript" src="include_js/jquery.blockUI.js"></script> <script type="text/javascript"> $(document).ready(function(){ //先賦與圖片函數 change_bg('img1'); change_bg('img2'); //把點的圖片顯示在block裡面 $('.img').click(function(){ var img=document.createElement('img'); img.setAttribute('src',$(this).attr('src')); img.setAttribute('class',$(this).attr('data')); $('#inner').html(img); }); }); //函數 function change_bg(id){ $(document).on('click','.'+id,function(event){ alert('.'+id); }); } //觸發BLOCK $(function(){ $('.img').click(function(){ $.blockUI({ message: $('#block'), //要彈跳出的元素box css: { //弹出元素的CSS属性 marginLeft: '-250px', marginTop: '-300px', height:'auto', overflow:'auto', width:'400px', height:'400px', } }); $('.blockOverlay').attr('title','單擊關閉').click($.unblockUI); //遮罩層屬性的設置以及當鼠標單擊遮罩層可以關閉彈出層 $('#shop-btn1').click($.unblockUI); //也可以自定義一個關閉按鈕來關閉彈出層 }); }); </script> </head> <body> <img src="img/line.jpg" class="img img1" data="img1"/> <img src="img/line2.jpg" class="img img2" data="img2" /> <div> <p>先點↑,會alert一次,block跳出裡面的圖也可以alert,圖層關掉後,再點會alert兩次</p> <p>裡面的依然也可以alert,但外面的會一直+1次...要怎麼寫可以解決這個問題</p> <p>我只想要外面跟裡面alert各一次就好</p> <p>註:</p> <p>class='img'是觸發block</p> <p>原本是要做切換背景的,因為速度太快會看不出來問題點,所以用alert代替</p> <p>先謝謝試著來幫我解決問題的人</p> </div> <div id="block" style="display:none;"> <div id="inner"></div> </div> </body> </html>
沒有留言:
張貼留言