2011-02-23 93 views
1

我试图设置一个接口,其中有一个窗体包含关于一些jQuery UI选项卡的过滤器。这些标签通过ajax加载。问题与jQuery UI标签(通过ajax加载)和表单数据

当我点击其中一个选项卡时,我希望表单中的数据被提交到该选项卡。

我设置了ajaxOptions以从我的表单中获取数据,将其序列化并将其发布到url。我将缓存关闭,并且我关闭了ajaxOptions的缓存。

这是我用来设置选项卡的代码。

$("#schedule-tabs").tabs({ 
ajaxOptions: { 
        type: 'POST', 
        data: $('#filters').serialize(), 
        cache: false, 
        error: function(xhr, status, index, anchor) { 
           $(anchor.hash).html("<p>An error has been encountered while attempting to load this tab.</p>"); 
          } 
       }, 
cache:   false 
}); 

当标签负载,即沿传递的数据是在窗体时首次加载页面,即使我在形式已经改变了过滤器的数据。

我已加入下列到上述标签安装到验证表单数据沿途:

select: function(event, ui) { 
     alert($('#filters').serialize()); 
    }, 
load: function(event, ui){ 
      alert($('#filters').serialize()); 
     }, 

show: function(event, ui){ 
      alert($('#filters').serialize()); 
     } 

在所有3个实例,更新的形式的数据被提醒。但是,当数据到达我的页面时,它是原始数据而不是新数据。

看来某物正在某处被缓存,但我不知道在哪里。

不应该从每个ajax页面加载的表单中抓取新的数据吗?为什么被缓存?有没有其他方式可以覆盖标签内容加载时发布的数据?

这是我目前项目中的一个巨大阻滞器。如果我不能很快解决它,我将不得不寻找除了jQuery UI选项卡以外的其他解决方案。我想使用它们,但如果这个问题不能解决...

任何人都可以帮助吗?

回答

3

我相信我已经想出了我自己的问题的答案。我想分享以防其他人遇到同样的情况。

基本上,我添加了一个选项,当选中选项卡时,它将获取当前表单数据并重置ajaxOptions。

我现在使用的代码是:

// set up the jQuery UI Tabs 
var $tabs = $("#schedule-tabs").tabs({ 
    ajaxOptions: { 
         type: 'POST', 
         data: $('#filters').serialize(), 
         cache: false, 
         error: function(xhr, status, index, anchor) { 
            $(anchor.hash).html("<p>An error has been encountered while attempting to load this tab.</p>"); 
           } 
        }, 
    cache:   false, 
    select:   function(event, ui) { 
         // get the current form data 
         var filter_options = $('#filters').serialize(); 
         // update the data for the ajax options 
         $(this).tabs('option', 'ajaxOptions', { type: 'POST', 'data': filter_options }); 
         return true; 
        } 
}); 

我希望这可以帮助别人了。