2013-11-26 79 views
0

請告訴我如何停止加載頁面onclick如果頁面已經加載?加載頁面點擊,如果沒有加載之前

$(".Tab_heading:first-child").live('click',function(){ 
$.ajax({ 
      type: 'get', 
      url: "relatedInfo.action", 
      data: $(".relatedinfo_wrapper"), 
      success: relatedInfodesktop 
     }); 

$(".Tab_heading").removeClass("tabselected"); 
$(this).addClass("tabselected"); 
$(".RelService_wrapper").show(); 
$(".DepService_wrapper").hide(); 

}); 

Tab_heading作爲標籤(有兩個選項卡鏈接類=「Tab_heading」) 如果標題的頁面,在用戶點擊加載 但如果重新在標題,如果用戶點擊該頁面已經加載,它不應該再次加載(GET http:xxxxxxx/relatedInfo.action ---我不應該得到這個) 請提供解決方案

+0

除非您使用的是舊的(預1.7)版本的jQuery,你應該用['。對()'](http://api.jquery.com/on/),而不是過時的[ '.live()'](http://api.jquery.com/live/)。 – ajp15243

+0

.live()函數沒有問題 – Sweetz

+0

這是一個友好的建議,使用最新的API,因爲'.live()'被從jQuery中移除以支持'.on()'。 – ajp15243

回答

-1

試試這個代碼,你可以在加載頁面之前檢查變量。

var loaded = false; 

$(".Tab_heading:first-child").live('click',function(){ 
if(!loaded){ 
$.ajax({ 
     type: 'get', 
     url: "relatedInfo.action", 
     data: $(".relatedinfo_wrapper"), 
     success: relatedInfodesktop 
    }); 

$(".Tab_heading").removeClass("tabselected"); 
$(this).addClass("tabselected"); 
$(".RelService_wrapper").show(); 
$(".DepService_wrapper").hide(); 
}); 
} 
} 
function relatedInfodesktop(response){ 
//your code here 
loaded = true; 
} 
+0

無法正常工作........ – Sweetz

1

也許你只是在運行AJAX之前添加一些檢查。例如,正如我從您的代碼中看到的那樣,您刪除並添加了一些類。所以,如果你的ajax響應已經加載,你將在頁面中有不同的風格。所以嘗試這樣的事情

$(".Tab_heading:first-child").live('click',function(){ 
if ($(this).hasClass("tabselected")){ do nothing} 
else{$.ajax({you get the rest})} 
} 
+0

不工作:(。 – Sweetz

+0

優秀的方法Mykola;但是,而不是檢查,通過簡單地刪除事件,防止代碼再次運行。檢查發生,甚至沒有一次 – Adam

0

加載後禁用事件;在用戶點擊之前等待禁用事件可能不是最佳解決方案。 JQuery提供.load()函數;只需選擇將包含您的ajax加載內容的元素,然後致電

$('#my_loading_element').load(function() {$(".Tab_heading:first-child").off('click')}); 

就可以了。這會在元素加載後刪除點擊事件。在你成功的功能

$(".Tab_heading:first-child").off('click'); 

脫離事件:或者,如果該元件通過AJAX總是加載,你可以把這個。

在我看來,如果數據開始對一些用戶點擊之前甚至加載,你可能不應該在所有做Ajax調用和簡單地把內容在那裏從服務器端;但是,如果您必須進行ajax調用並且必須在點擊時觸發它,則還可以使用第三個選項,即在第一次點擊時解除該事件,以便隨後的所有點擊都不會執行任何操作(例如,當用戶點擊並觸發ajax一次,然後在點擊完成之前再次點擊,然後一次又一次......錯誤的代碼會多次放入內容)。您的代碼看起來會更像這樣:

$(".Tab_heading:first-child").live('click',function(){ 
    $(this).off('click'); 
    $.ajax({ 
    ... 
    }); 
}); 

這可能是您的情況中的最佳選擇;點擊一次,但不會再次發出ajax調用觸發器。

編輯

$(".Tab_heading:first-child").live('click',function(){ 
    $(this).off('click'); 
    $.ajax({ 
    ... 
     success: function() { 
      $(".Tab_heading:first-child").on('click', function() { 
       //open the tab here 
      }).click(); 
     } //no trailing comma for IE compatibility 
    }); 
}); 

這最後調用。點擊()是爲了方便,因此用戶不必在選項卡上單擊兩次將其打開。

最後一兩件事:如果你使用jQuery是不是1.7或更高版本,您應該更新的原因有很多。新版本更易於使用,更直觀,更高效,更笨拙,並且可能具有對於嚴肅的Web開發人員至關重要的安全功能。即使需要很長時間才能轉換網站,這也是值得的。

+0

如果我這樣做,點擊這個,標籤內容也不會打開 – Sweetz

+0

這可能是因爲你有多個事件觸發點擊;如果你只有這兩個事件(標籤打開,和標籤加載)觸發點擊,你可能希望把你的標籤打開代碼內的標籤加載代碼。請參閱我的編輯。 – Adam

+0

只有點擊事件是標籤打開n內容加載從提供的操作,所以如果我嘗試_.off()_然後用戶不能點擊和選項卡不會打開,因爲我使用jQuery 1.4 _.on()_將不會工作:( – Sweetz