2011-11-06 71 views
0

我的jQuery代碼如下:jQuery的.slideToggle()重複

$('.sidebar_options_arrow').click(function() { 
    id = $(this).attr('rel'); 
    toggled = 0; 
    if(toggled == 0) { 
     toggled = 1; 
     $('#'+id+'-info').slideToggle('fast', function() { 
      alert('1'); 
      toggled = 0; 
     }); 
     $('.chat_sidebar_desc').not($('#'+id+'-info')).slideUp('fast'); 
    } 
    return false; 
}); 
$('#chat_sidebar ul li').click(function() { 
    id2 = $(this).attr('rel'); 
    if(loading == 0) { 
     loading = 1; 
     $('#chat_main_container').fadeOut(function() { 
      $('#loading').fadeIn(function() { 
       if(id2 == 0) { 
        $('#chat_main_container').empty().load('chat/start.php'); 
        $('#loading').delay(500).fadeOut(function() { 
         loading = 0; 
         $('#chat_main_container').fadeIn(); 
        }); 
       }else{ 
        $('#chat_main_container').empty().load('chat/index.php?roomid='+id2); 
        $('#loading').delay(500).fadeOut(function() { 
         loading = 0; 
         $('#chat_main_container').fadeIn(); 
        }); 
       } 
      }); 
     }); 
    } 
    return false; 
}); 

我遇到的問題如下:

  • 我點擊sidebar_options_arrow並能正常工作和的slideToggle的我元件。

  • 然後,我點擊同一頁上的一個li並讓它加載一個頁面。

  • 我再次點擊sidebar_options_arrow,它會一個接一個地切換兩次。例如。在這個例子中,它會切換它以顯示元素,然後切換它以隱藏它。

  • 如果我再點擊頁面上的另一個li,然後再次單擊sidebar_options_arrow,它將切換3次。這是一個持續的模式,我已經測試過10次切換,並通過在切換時發出警報來確認它。

我真的很感謝任何幫助,我可以得到這個,這是非常惱人的!

在此先感謝。

+0

如果你可以把案件放在jsfiddle.net ..我可以幫你。 –

+0

我會看看我能做些什麼。 – Oyed

回答

3

上面的代碼很可能是多次運行,可能來自AJAX負載,這意味着$('.sidebar_options_arrow').click()代碼正在獲取額外的處理程序,每個加載時間爲。要在行動中看到這一點,只需在第一行上方添加alert("binding");即可:$('.sidebar_options_arrow').click(function() {

加載AJAX的內容不應該重新運行處理程序,除非需要,正如您在本例中所看到的那樣,由於每個加載都會添加一組相同的處理程序,因此每個加載都會導致一些不需要的重複/重疊行爲。

您需要將JS部分從您正在加載的內容中移出,以免它重新運行或以其他方式阻止它。在最壞的情況下(我推薦它根本不運行,因爲這樣更便宜,但如果你的 ......),你可以簡單地在.click()之前調用.unbind()附加處理程序。注意:如果您有多個處理程序(潛在的用戶腳本等),則需要命名該函數並明確呼叫.unbind("click", functionName)以確保安全。