2011-08-12 45 views
0

儘管我的情況看起來與JQuery站點上給出的示例看起來相同,但我在使用JQuery時遇到了.bind().unbind()的一些奇怪行爲。在這種情況下,綁定/解除綁定應用於JQuery選項卡(其中之一)。當點擊標籤時,它通過ajax加載控制器動作。JQuery .bind()/ .unbind()問題

# show.html.erb: 
$(document).ready(function(){ 
    var projectNav = function(){ 
     $("#tabs-project .loadingDiv").show(); 
     $.ajax({ url: "<%= url_for(params.except(:action).merge(:action => 'show_project')) %>", dataType: 'script' }) 
    }; 
    $("#projectMenuButton").bind('click', projectNav); 
}); 

# show_project.js.erb 
$("#tabs-project .loadingDiv").remove(); 
$("#tabs-project").append('<%= escape_javascript(render :partial => "profiles/project")%>') 
$("#projectMenuButton").unbind('click', projectNav); 

.unbind()部分不是這樣工作 - 再次單擊菜單按鈕重新加載部分。

當我將現有的解除綁定更改爲$("#projectMenuButton").unbind('click');時,它解除了包括選項卡主要功能(將視圖切換到右側div)的所有內容。

回答

1

您有範圍問題... projectNav僅在$(document).ready的範圍內定義,所以在傳入unbind時未定義。解決方案:

# show.html.erb: 
var projectNav = function(){ 
     $("#tabs-project .loadingDiv").show(); 
     $.ajax({ url: "<%= url_for(params.except(:action).merge(:action => 'show_project')) %>", dataType: 'script' }) 
}; 
$(document).ready(function(){ 
    $("#projectMenuButton").bind('click', projectNav); 
}); 

# show_project.js.erb 
$("#tabs-project .loadingDiv").remove(); 
$("#tabs-project").append('<%= escape_javascript(render :partial => "profiles/project")%>') 
$("#projectMenuButton").unbind('click', projectNav); 
+0

完美答案克里斯,非常感謝。 – sscirrus