作者PTTLSboy (阿銫)
看板Ajax
標題[問題] 如何呼叫N次的function只執行一個
時間Tue Oct 30 21:26:42 2012
我頁面上有一個<img class='abc' src='略'/>
click事件並傳入class名稱如:change_bg('abc')
頁面下面放了一個jquery的blockUI,裡面有一個<img>
當我點擊頁面上的<img class='abc'/>,會打開block
而且會指定BLOCK裡的<img>的class也等於'abc'
並且指定一樣的事件,如:change_bg('abc')
讓他們兩個class一樣的目的是要這兩個<img>同步動作,
但block裡面的<img>,不是固定的,指到哪一張圖,他的class就是誰
問題在於block裡面的圖片事件change_bg('abc')會一直保留
影響到我原本頁面上的<img class='abc'>,變成change_bg('abc')執行兩次,關閉再打開
N次就會執行N次,因為是有其他用意,沒辦法改,有沒有其他的方法,讓我的
change_bg('abc'),只執行一個就好??
原本在頁面上的change_bg('abc'),點擊block出來裡面的<img>即使指定了class='abc'
及事件,但是它就是不理原本頁面上的change_bg
所以才再指派了一樣的事件給它:change_bg('abc')
但是關閉後會造成我原本頁面上的<img class='abc'/>執行兩次change_bg('abc')
謝謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.0.232.61
1F:推 s25g5d4:有看沒有懂 有code嗎 10/30 22:14
我弄一個範例網頁,等一下
※ 編輯: PTTLSboy 來自: 123.0.232.61 (10/30 22:37)
2F:→ SansWord:看不太懂,可是直覺上覺得你要一個清除 listener的方法 10/30 23:53
3F:→ PTTLSboy:對對..可以這麼說..有辦法清除後來執行的function嗎 10/31 00:20
http://myphpdiary.com/test.php
問題大概如同這個網頁描述的
※ 編輯: PTTLSboy 來自: 123.0.232.61 (10/31 00:56)
5F:→ b12031106:我想你可能要先弄清楚你的change_bg到底在做什麼 10/31 01:50
change_bg裡面做的事情是傳遞ID值進去做一些滑鼠事件
※ 編輯: PTTLSboy 來自: 123.0.232.61 (10/31 02:24)
因為BLOCK裡的<img class='img1'是後來程式產生的,所以一開始執行的change_bg('img1')
只對原本的有用,BLOCK裡的就沒反應,所以當圖片產生的時候就補change_bg給它
有沒有方法可以解決這個問題:block裡的img不要重新給它change_bg,用一開始的change_bg
※ 編輯: PTTLSboy 來自: 123.0.232.61 (10/31 02:32)
※ 編輯: PTTLSboy 來自: 123.0.232.61 (10/31 02:33)
7F:→ tyf99:簡單一點就設個 global flag,func 執行就 +1 10/31 20:15
8F:→ tyf99:onclick時flag歸零。 func先檢查flag,大於0就直接return 10/31 20:18
謝謝兩個,用了b12031106大的jquery .on解決了..
出乎意料的簡單,而且有效!
※ 編輯: PTTLSboy 來自: 123.0.232.61 (10/31 21:11)
9F:推 Darkland:其實 jQuery也可以用 Element 當 selector 11/01 23:42
10F:→ Darkland:所以你的 change_bg 改成也接受傳 element 的話也可以解 11/01 23:43
請問是我誤會element意思嗎? 之後產生的還是不會alert
change_bg($('.img1')); //傳入這樣嗎
function change_bg(id){
id.click(function(){
alert(1);
});
}
※ 編輯: PTTLSboy 來自: 123.0.232.61 (11/02 00:44)
11F:→ b12031106:之後產生的element並沒有包在你一開始的$('.img1')裡面 11/02 01:10
12F:→ b12031106:去查一下.on跟一般的.click之類的方法有什麼不一樣 11/02 01:12
13F:→ b12031106:應該就會懂了 11/02 01:12
14F:→ Darkland:var img=document.createElement('img'); 11/02 13:40
15F:→ Darkland:change_bg(img); 11/02 13:41
16F:→ Darkland:function change_bg(element){$(element).click(...)}; 11/02 13:41