2014-04-09 42 views
0

我用toggle()函數來執行兩個函數。 當我點擊class =「favorite」的圖片時,首先點擊,第一個函數必須執行,我應該得到警報('test1'),第二次點擊時,第二個函數必須執行,我應該得到alert('test2')並且執行必須在那裏停止。如何使用jQuery中的切換執行兩個函數?

我的問題是,當圖像被第二次點擊時,我得到alert('test2')緊接着alert('test1'),只有第二個函數應該執行第二次點擊即我應該得到僅在第二次點擊時提醒('test2')。如何在第二次點擊時停止執行第一個功能?

這是index.phtml文件我的jQuery代碼:

jqry("#wrap").delegate('img.favourite','click',function(){ 
    var id = jqry(this).attr('pid'); 
    jqry('#'+id).toggle(function(){ 
      alert('test1');  
     }, 
     function(){ 
      alert('test2'); 
     } 
    ); 
}); 

這是我在JS文件中的代碼

<img class="favourite" src="images/fav.png" alt="favourite" pid ='project_id'> 

我首先點擊獲取輸出 test1

我第二次點擊的輸出是 test2 test1

在第二次點擊我應該得到的輸出警報test2和停止執行,但它進一步執行先前的功能和設定的兩個警報即test2其次test1。我該如何解決這個問題?

+0

縮進你的代碼會使它更具可讀性。 – Utkanos

+1

一些我不明白的東西。即使您的圖片上沒有ID,您也會調用##id。另外,如果您切換圖像,您又該如何第二次點擊它?如果它隱藏了? – Niklas

+0

@尼克拉斯 - 我認爲他們在其他對象上調用'.toggle()'。但是,這當然不清楚他們想要完成什麼。 – jfriend00

回答

0

您正在使用的.toggle()的形式已在jQuery 1.8中棄用,並在1.9中刪除。另外,它每次調用時都會綁定一個點擊處理程序,所以您真的不想多次調用它,這可能是您看到兩條警報的原因,因爲每次綁定它時,都會在點擊時獲得多一個回調。第一個,然後兩個,然後三個等...

我建議你找到一種不同的方式交替功能,每次點擊。也許只需在.data()上設置一個標誌,並根據標誌進行替代。

這不完全清楚你想要什麼和id元素的.toggle()函數來完成,但是這將讓你交變函數調用,然後你可以實現任何你在每個功能要:

jqry("#wrap").delegate('img.favourite', 'click', function() { 
    var toggle = $(this).data("toggleFlag") || false; 
    var id = jqry(this).attr('pid'); 
    if (toggle) { 
     // do whatever you want with id here 
     alert("test1"); 
    } else { 
     // do whatever you want with id here 
     alert("test2"); 
    } 
    // reverse the toggle flag 
    $(this).data("toggleFlag", !toggle); 
}); 
+0

@Rajitha - 由於您是StackOverflow的新成員,因此您應該知道,當某人回答您的問題(或許多問題的最佳答案)時,您可以檢查答案左側的綠色複選標記。這表明其他人向您指出了您選擇的答案,併爲您和答案者贏得了一些聲望點(這可以讓您在網站上獲得一段時間的特權)。 – jfriend00

+0

謝謝,它的作品!但是當我加載頁面時,該功能只能在兩次點擊後運行,然後工作正常,但如果刷新頁面,我需要再次點擊兩次。如何解決這個問題? – Rajitha

+0

雅即將和現在我檢查了綠色複選標記 – Rajitha