【问题标题】:multiple slickGrid in jQuery tabsjQuery 选项卡中的多个 slickGrid
【发布时间】:2011-06-14 05:54:42
【问题描述】:

我正在创建多个 slickGrids 并将它们放在一个 jQuery 选项卡中。 第一个 jQuery 选项卡上的第一个 slickGrid 工作正常,但是当我切换到下一个选项卡时 在调整标题大小并且列未与标题对齐之前,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>

【问题讨论】:

    标签: jquery slickgrid


    【解决方案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;
    }
    

    【讨论】:

      【解决方案2】:

      这基本上是我的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 选项卡的“显示”事件中。我不得不使用这些事件而不是 document.ready/load,因为我没有显示标签的 CSS 来删除“标签闪烁”,即使这种情况发生在页面加载和标签正在初始化时也是如此。我有这样的东西:

            $('#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;
                            }
                    }
            });
        

        【讨论】:

          【解决方案4】:

          好的。好吧,我将尝试分解正在发生的事情以及为什么它不起作用。基本上可能发生的事情是您在初始化 slickgrid 实例之前设置选项卡。了解这一点很重要,因为您的第二个和第三个选项卡基本上处于隐藏状态,因此您的 slickgrids 没有初始化。

          尝试更改顺序,看看是否有效。如果没有,那么我建议将您的 slickfgrid 初始化程序放入 document.ready 并将您的选项卡初始化程序放入 document.load。这有点 hacky,但产生了很好的结果。

          希望这是有道理的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-04-15
            • 1970-01-01
            • 2012-10-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-01-17
            • 1970-01-01
            相关资源
            最近更新 更多