2010-09-24 190 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,该选项卡将不会切换,如果属实的标签将切换 - 所以你不必做你的验证功能