[問題] 如何呼叫N次的function只執行一個

看板Ajax作者 (阿銫)時間13年前 (2012/10/30 21:26), 編輯推噓2(2014)
留言16則, 6人參與, 最新討論串1/1
我頁面上有一個<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

10/30 22:14, , 1F
有看沒有懂 有code嗎
10/30 22:14, 1F
我弄一個範例網頁,等一下 ※ 編輯: PTTLSboy 來自: 123.0.232.61 (10/30 22:37)

10/30 23:53, , 2F
看不太懂,可是直覺上覺得你要一個清除 listener的方法
10/30 23:53, 2F

10/31 00:20, , 3F
對對..可以這麼說..有辦法清除後來執行的function嗎
10/31 00:20, 3F
http://myphpdiary.com/test.php 問題大概如同這個網頁描述的 ※ 編輯: PTTLSboy 來自: 123.0.232.61 (10/31 00:56)

10/31 01:48, , 4F

10/31 01:50, , 5F
我想你可能要先弄清楚你的change_bg到底在做什麼
10/31 01:50, 5F
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)

10/31 12:57, , 6F

10/31 20:15, , 7F
簡單一點就設個 global flag,func 執行就 +1
10/31 20:15, 7F

10/31 20:18, , 8F
onclick時flag歸零。 func先檢查flag,大於0就直接return
10/31 20:18, 8F
謝謝兩個,用了b12031106大的jquery .on解決了.. 出乎意料的簡單,而且有效! ※ 編輯: PTTLSboy 來自: 123.0.232.61 (10/31 21:11)

11/01 23:42, , 9F
其實 jQuery也可以用 Element 當 selector
11/01 23:42, 9F

11/01 23:43, , 10F
所以你的 change_bg 改成也接受傳 element 的話也可以解
11/01 23:43, 10F
請問是我誤會element意思嗎? 之後產生的還是不會alert change_bg($('.img1')); //傳入這樣嗎 function change_bg(id){ id.click(function(){ alert(1); }); } ※ 編輯: PTTLSboy 來自: 123.0.232.61 (11/02 00:44)

11/02 01:10, , 11F
之後產生的element並沒有包在你一開始的$('.img1')裡面
11/02 01:10, 11F

11/02 01:12, , 12F
去查一下.on跟一般的.click之類的方法有什麼不一樣
11/02 01:12, 12F

11/02 01:12, , 13F
應該就會懂了
11/02 01:12, 13F

11/02 13:40, , 14F
var img=document.createElement('img');
11/02 13:40, 14F

11/02 13:41, , 15F
change_bg(img);
11/02 13:41, 15F

11/02 13:41, , 16F
function change_bg(element){$(element).click(...)};
11/02 13:41, 16F
文章代碼(AID): #1GZzMM14 (Ajax)