2010-09-24 217 views
0

我想在切換到下一個選項卡之前驗證選項卡內容(使用ajax驗證)。所以當用戶點擊標籤時,當前標籤內容被髮送到服務器進行驗證。當收到服務器的結果時,我切換到下一個選項卡。下面是一些代碼:JQueryUI選項卡選擇和驗證

$('#tabs').tabs({ 
    select: function(event, ui) { 
     ... 
     validate(currentIndex, nextIndex); 
     return false; 
    } 
}); 

function validate(currentIndex, nextIndex){ 
    $.ajax({ 
     ... 
     complete: function(){ 
      $("#tabs").tabs('select', nextIndex); 
     } 
     ... 
    } 
} 

你可能已經看到這個問題,它的無限循環,因爲驗證導致標籤的,導致驗證等選擇處理程序。我如何解決這個沒有全局變量?

謝謝。

回答

1

我不確定這是否會起作用(還沒有嘗試過您的代碼),但是您不能使用.data(key,value)添加某種「已驗證過的」標誌來檢查嗎?所以你添加一個if語句,在再次輸入驗證函數之前檢查它。

+0

嘿,你可以發佈你想出的解決方案嗎?謝謝 – Riki 2010-10-04 21:05:47

+0

不幸的是,我使用了你建議的。我說「不幸」,因爲它幾乎是一個全局變量或某種變量,我試圖避免使用它 - 我需要設置,重置或清除變量每次選擇標籤,代碼看起來不錯。但是,謝謝,它看起來更乾淨=) – 2010-10-14 06:30:37

3

請採取this - official Jquery tabs documentation

你的驗證功能的外觀不應該做任何東西,除了返回true或false。

$('#tabs').tabs(
{ 
    select: function(event, ui) 
    { 
     ... 
     return validate(currentIndex, nextIndex); 
    } 
}); 

function validate(currentIndex, nextIndex) 
{ 
    $.ajax(
    { 
     ... 
     success: function(data) 
     { 
      // example response: {"error": 0} 
      if(!data.error) return true; 
      else return false; 
     } 
     ... 
    } 
} 

當你的選項卡(「選擇」 ...函數返回false,該選項卡將不會切換,如果屬實的標籤將切換 - 所以你不必做你的驗證功能