2011-06-04 65 views
0

我在我的(document).ready函數如下:爲什麼下面的jQuery函數會觸發兩次?

replace_fav_url(); 

和jQuery函數:

function replace_fav_url(){ 
    $j('a.fav').click(function(e) { 
     $j.post($j(this).attr('href')); 
     e.preventDefault(); 
    }); 
} 

一切正常,良好的與該功能似乎被調用兩次例外呢? 1點擊兩個函數調用?不知道這裏發生了什麼?

編輯:

FULL的application.js文件:

var $j = jQuery.noConflict(); 

//Append javascritp header requests 
$j.ajaxSetup({ 
    'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")} 
}); 


$j(document).ready(function() { 

    $j(document).ajaxSend(function(event, request, settings) { 
    if (settings.type == 'GET') return; 
    if (typeof(AUTH_TOKEN) == "undefined") return; 
    settings.data = settings.data || ""; 
    settings.data += (settings.data ? "&" : "") + "authenticity_token=" + encodeURIComponent(AUTH_TOKEN); 
    }); 


    replace_vote_urls(); 
    replace_fav_url(); 
}); 


function replace_vote_urls(){ 
    $j('a.vote').click(function(e) { 
     $j.post($j(this).attr('href')); 
     e.preventDefault(); 
    }); 

} 


function replace_fav_url(){ 
    $j('a.fav').click(function(e) { 
     $j.post($j(this).attr('href')); 
     e.preventDefault(); 
    }); 
} 
+0

能否請您發表您的JS的其餘部分以及 – Niklas 2011-06-04 00:04:51

+0

加滿的.js文件僅供參考,(這兩種功能[replace_vote_urls,replace_fav_url]火兩次 – 2011-06-04 00:15:12

+1

爲什麼不添加一個'調試;'語句(硬編碼斷點)和使用螢火蟲的堆棧顯示找出第二次調用該函數的位置? – ThiefMaster 2011-06-04 00:19:35

回答

3

我只是猜測這是問題,但如果你調用不止一次replace_fav_url()功能更多,它會綁定一個額外的點擊事件到a.fav。並且每次你打電話時都會繼續這樣做。

如果以任何方式更改a.fav元素的數量,最好使用delegate()live()來綁定單擊事件。

+1

對於fudgey的答案+1。爲了演示,請參閱[this fiddle](http:///jsfiddle.net/UGsHR/14/)。也許你還在別的地方調用'replace_fav_url()'? – David 2011-06-04 00:21:29

+0

我已經搜索entier項目...只調用一次函數。我簡直就是這麼寫的,它不太可能是那個函數調用會被複制......不過好的建議。那個小提琴應用程序非常漂亮。 – 2011-06-04 04:16:28

+0

找到了!在rails中添加 - >:defaults會加載你的application.js文件,然後如果你再次添加application.js,你會得到entier文件2x,給你兩個調用每個動作。 – 2011-06-04 04:30:36

相關問題