2013-04-09 47 views
1

在頁面trigger.php我加載content.php這樣的:jQuery的,我的函數被調用x倍,而不是一次

$(document).on('click', '#trigger', function() { 
     $('#content').load('content.php'); 
}); 

在content.php我有這樣的jQuery代碼:

$(function() { 

    clickLike = function(el,el2) { 
     alert(el+el2); 
    } 

    $(document).on('click', '.like', function(){ 
     clickLike($(this).attr('id'),'yes'); 
    }); 

    $(document).on('click', '#exit', function() { $('#content').html(''); }); 
    $(document).off('click', '.like', clickLike); 

}); 

所以當我第一次點擊一個#trigger時,content.php被加載,當我點擊時,就像我有一個警報。然後我點擊退出,我再次加載content.php,當我點擊時。就像我現在有2個警報,如果我做了x次,我會有x警報。我不明白爲什麼.off不起作用。

回答

0

每次你在content.php中執行jQuery代碼時,你都會綁定onclick函數,就像用一個匿名函數調用clickLike()。

在後面的代碼中,它看起來像您試圖使用off()來解除綁定,以避免多個事件綁定,但是您指定clickLike作爲要移除的處理程序,而這並不在第一位。

要解除綁定事件處理程序,您需要指定您綁定的確切處理程序(無法使用匿名函數),或者根本不指定處理程序,在這種情況下,所有處理程序都將綁定。

此外,我認爲你只是想解除「退出」處理程序中的綁定,並不總是像上面那樣。

所以,我認爲有以下會爲你工作(但我沒有測試過)

$(function() { 

    clickLike = function(el,el2) { 
     alert(el+el2); 
    } 

    $(document).on('click', '.like', function(){ 
     clickLike($(this).attr('id'),'yes'); 
    }); 

    $(document).on('click', '#exit', function() { 
     $('#content').html(''); 
     $(document).off('click', '.like'); 
    }); 

}); 
+0

工作得很好,非常感謝! – 2013-04-09 12:41:04