2011-06-04 78 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

相关问题