2011-01-24 50 views
7

我正在創建多個slickGrid並將它們放入jQuery選項卡中。 第一個jQuery選項卡上的第一個slickGrid可以正常工作,但當切換到下一個選項卡 時,只有在調整標題大小並且列未與標題對齊時,纔會顯示slickGrid上的數據列。有什麼辦法可以解決這個問題嗎? 這裏是我的代碼exerp:jQuery選項卡中的多個slickGrid

<ul class="tabs"> 
    <li><a href="#tab_1">FADF Mono</a></li> 
    <li><a href="#tab_2">BADF Mono</a></li> 
    <li><a href="#tab_3">BADF Color</a></li> 
</ul> 
<div class="tab_container"> 
     <div id="tab_1" class="tab_content"> 
      <div id="slickGrid_1"></div> 
     </div> 
     <div id="tab_2" class="tab_content"> 
      <div id="slickGrid_2"></div> 
     </div> 
     <div id="tab_3" class="tab_content"> 
      <div id="slickGrid_3"></div> 
     </div> 
</div> 

回答

9

好的。那麼,我會試着分解正在發生的事情,爲什麼它也沒有工作。基本上可能發生的情況是,在初始化slickgrid假設之前,您正在設置您的選項卡。這一點很重要,因爲你的第二個和第三個標籤本質上被賦予一個隱藏狀態,因此你的slickgrids不會初始化。

嘗試更改順序,看看是否有效。如果不是,那麼我建議將你的slickfgrid初始化器放入document.load中,並將你的標籤初始化器放到document.load中。這有點冒險,但會產生好的結果。

希望這是有道理的。

0

這主要是我的jQuery的代碼重構,動態由PHP代碼生成的驗證碼。

$(document).ready(function() { 

    //When page loads... 
    $(".tab_content").hide(); //Hide all content 
    $("ul.tabs li:first").addClass("active").show(); //Activate first tab 
    $(".tab_content:first").show(); //Show first tab content 

    //On Click Event 
    $("ul.tabs li").click(function() { 

     $("ul.tabs li").removeClass("active"); //Remove any "active" class 
     $(this).addClass("active"); //Add "active" class to selected tab 
     $(".tab_content").hide(); //Hide all tab content 

     var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to identify the active tab + content 
     $(activeTab).fadeIn(); //Fade in the active ID content 
     return false; 
    }); 

    }); 
    </script> 
    <script> 
var grid_1;  
var columns_1 = [   
{id:"title", name:"Title", field:"title"},   
{id:"duration", name:"Duration", field:"duration"},   
{id:"%", name:"% Complete", field:"percentComplete"},   
{id:"start", name:"Start", field:"start"},   
{id:"finish", name:"Finish", field:"finish"},   
{id:"effort-driven", name:"Effort Driven", field:"effortDriven"}   
]; 

var options_1 = {   
enableCellNavigation: false,   
enableColumnReorder: false  
}; 

$(function() {   
var data_1 = [];    
for (var i = 0; i < 500; i++) {    
data[i] = {     
title: "Task " + i,     
duration: "5 days",     
percentComplete: Math.round(Math.random() * 100),     
start: "01/01/2009",     
finish: "01/05/2009",     
effortDriven: (i % 5 == 0)    
};   
} 

grid_1 = new Slick.Grid($("#slickGrid_1"), data_1, columns_1, options_1);  
})  
</script> 

<script>   
var grid_2;  
var columns_2 = [   
{id:"title", name:"Title", field:"title"},   
{id:"duration", name:"Duration", field:"duration"},   
{id:"%", name:"% Complete", field:"percentComplete"},   
{id:"start", name:"Start", field:"start"},   
{id:"finish", name:"Finish", field:"finish"},   
{id:"effort-driven", name:"Effort Driven", field:"effortDriven"}   
];  
var options_2 = {   
enableCellNavigation: false,   
enableColumnReorder: false  
}; 

$(function() {   
var data_2 = [];    
for (var i = 0; i < 500; i++) {    
data[i] = {     
title: "Task " + i,     
duration: "5 days",     
percentComplete: Math.round(Math.random() * 100),     
start: "01/01/2009",     
finish: "01/05/2009",     
effortDriven: (i % 5 == 0)    
};   
}   
grid_2 = new Slick.Grid($("#slickGrid_2"), data_2, columns_2, options_2);  
})  
</script> 

<script>   
var grid_3;  
var columns_3 = [  
{id:"title", name:"Title", field:"title"},   
{id:"duration", name:"Duration", field:"duration"},   
{id:"%", name:"% Complete", field:"percentComplete"},   
{id:"start", name:"Start", field:"start"},   
{id:"finish", name:"Finish", field:"finish"},   
{id:"effort-driven", name:"Effort Driven", field:"effortDriven"}   
]; 

var options_3 = {   
enableCellNavigation: false,   
enableColumnReorder: false  
}; 

$(function() {   
var data_3 = [];    
for (var i = 0; i < 500; i++) {    
data[i] = {     
title: "Task " + i,     
duration: "5 days",     
percentComplete: Math.round(Math.random() * 100),     
start: "01/01/2009",     
finish: "01/05/2009",     
effortDriven: (i % 5 == 0)    
};   
} 
grid_3 = new Slick.Grid($("#slickGrid_3"), data_3, columns_3, options_3); 
}) 
</script> 
3

您應該將網格加載到jQuery選項卡的「show」事件中。我不得不使用這些事件而不是document.ready/load,因爲我的標籤的CSS沒有顯示「tab flash」,即使在頁面加載和標籤被初始化時發生這種情況。像這樣的東西是我有:

$('#tabs').tabs({ 
      fx: [ 
        {opacity: 'toggle', duration: 'fast'}, 
        {opacity: 'toggle', duration: 'fast'} 
      ], 
      show: function(event, ui) { 
        if($(ui.tab).text() == "grids" && !this.gloaded) { 
          grids.init(); 
          this.gloaded = true; 
        } 
      } 
    }); 
1

似乎你可能正在與我遇到的同樣的問題掙扎。 jQuery的標籤隱藏行爲運行在IE和chrome上的slickgrid渲染上。 FIrefox渲染它很好。 這就是我所說的 - 進行以下修改jQuery UI的CSS -

.ui-tabs .ui-tabs-hide { display: none !important; } 

.ui-tabs .ui-tabs-hide { 
    position: absolute; 
    left: -10000px; 
}