但這個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>
沒有留言:
張貼留言