2014-02-25 48 views
1

下面的代碼:爲什麼我的方法執行兩次?

$(document).ready(function() { 

    $('.category').click(function(){ 
     $("#category-menu").modal(); 
     $("#category-menu").css({'display' : 'block'}); 
     $('.single-category').click(function(){ 
      $('.category-link').fadeOut('slow', 'linear', fadeInCategory($(this))); 
    /*the line above some how gets called again*/ 
     }); 

    }); 

    $('.mp-back').click(function(){ 
     $('.category-link').css('display', 'none'); 
     var testing = $(this).closest('.mp-level'); 
     testing.css('display', 'none'); /*after this line */ 
    }); 

}); 

function fadeInCategory(category){ 
    category.find('.mp-level').fadeIn('slow'); 
    category.find('ul').fadeIn('slow'); 
} 
function back2allCategories(){ 
    $('.category-link').css('display', 'block'); 
} 

$('.single-category')點擊我淡出了一堆的HTML,並在短短這個孩子褪色。
mp-back應該回遷,所以我淡出(或設置display:none作爲一個屬性)

然而,一旦$('.mp-back').click(function(){已經執行完畢,這條線:

$('.category-link').fadeOut('slow', 'linear', fadeInCategory($(this))); 

不知怎的,它再次被執行,我可以不知道爲什麼。
(我知道這是通過在谷歌Chrome控制檯中的折點發生)

但是我無法真正弄清楚爲什麼。

爲什麼$('.category-link').fadeOut('slow', 'linear', fadeInCategory($(this)));被重新調用?

+6

你應該幾乎從不調用裏面綁定另一個事件處理函數的事件處理函數。每次你點擊'.category'你爲'.single-category'綁定一個額外的點擊處理器,所以你最終得到了多個處理器。 – Barmar

+0

嗯..這是有道理的...是這個問題,還是隻是良好的做法? – brendosthoughts

+2

這就是問題所在。 –

回答

3

每當您單擊.category時,您正在爲.category-link分配一個新處理程序。保持足夠的時間,你會崩潰的瀏覽器。

有一個事件處理程序應該分配另一個事件的情況非常少。這不是其中之一;)

+0

謝謝......這是有道理的......不是解決我遇到的問題......一個處理程序是另一個孩子因此我爲什麼看到debuger中的循環...但這是我不是awre的東西,清楚/邏輯上可能是一個大問題...我的代碼不再看起來像張貼..並希望錯誤生病永遠不會再做一次 – brendosthoughts

0

除了Niets的回答,您可以使用解除綁定您的點擊事件來解決問題,例如

$('.category').click(function(){ 
    $("#category-menu").modal(); 
    $("#category-menu").css({'display' : 'block'}); 
    // unbind the click before binding it again 
    $('.single-category').unbind('click').click(function(){ 
     $('.category-link').fadeOut('slow', 'linear', fadeInCategory($(this))); 
     /*the line above some how gets called again*/ 
    }); 
}); 

顯然,這是一個解決辦法,我不建議這樣做,它只是一些作品:)

相關問題