繁体   English   中英

如何使引导程序选项卡仅在单击时加载内容,而不在页面上加载

[英]How to make bootstrap tabs only load content when clicked, not on page load

我的用例是我有一个用6个选项卡编写的页面。 这些选项卡加载我创建的php文件索引功能的结果。 当我将USB驱动器上的文件直接连接到服务器时,一切都很好。 以秒为单位加载页面。 但是,我已将文件移至NAS存储驱动器,并且现在需要30-60秒钟以上的时间才能加载页面。 这是因为使用引导程序选项卡时,它会在页面加载时加载所有选项卡。 因此,必须在页面完成加载之前为所有选项卡加载所有文件。

我想要做的是仅加载“当前”标签。 我知道每次都可以使用$ POST并重新加载页面,但是老实说,我认为我真正需要做的是使用AJAX。 但是我发现的示例令人困惑,并且我很难对它们进行调整以对我有用。

这是我想要发生的事情:

  1. 最初使用“空”标签加载页面。 从视觉上看,这已经发生了,因为我的“着陆”页面是一条欢迎消息,其选项卡位于顶部,并链接到相应的索引。
  2. 单击选项卡后,显示该页面并仅加载该选项卡的文件。 通过调用针对所需目录的PHP函数并建立文件索引来加载文件。 因此,我想“按需”运行PHP函数而无需重新加载页面本身。

这是引导标签链接的示例:

<li class="nav-item">
   <a class="nav-link" data-toggle="tab" href="#movies" role="tab">Movies</a>
</li>

我认为我需要做的是向该链接添加一个onclick ,该链接调用一个AJAX函数,然后依次为该选项卡调用PHP函数,该选项卡将在单击该选项卡时显示。

这是我当前在一个选项卡中运行的代码:

<?php  
     $allowed = array("mp4", "mkv", "avi", "mov", "mpg", "wmv", "flv", "vob");
     $excluded = array("jpg", "nfo", "htaccess", "db");
     echo php_file_tree("/smb/movies/", "/movies", "https:xxx[link]",$allowed, $excluded);
     unset($allowed, $excluded);
?>

考虑将其包装成如下功能:

<?php  
  function indexmovies() { 
    $allowed = array("mp4", "mkv", "avi", "mov", "mpg", "wmv", "flv", "vob");
    $excluded = array("jpg", "nfo", "htaccess", "db");
    echo php_file_tree("/smb/movies/", "/movies", "https:xxx[link]",$allowed, $excluded);
    unset($allowed, $excluded);
  }
?>

因此,总结一下。 我希望页面在加载时仅加载HTML。 然后,当单击一个选项卡时,我希望它切换到该选项卡并“按需”加载上述功能。

想要我想工作吗? 如果是这样,最好的解决方法是什么?

我使用Jquery UI作为选项卡。

HTML /引导选项卡

<div id="tabs">
    <ul>
        <li><a href="#tabs-1">Tab 1</a>
        </li>
        <li><a href="#tabs-2">Tab 2</a>
        </li>
        <li><a href="#tabs-3">Tab 3</a>
        </li>
    </ul>
    <div id="tabs-1">
        <p>Content for Tab 1</p>
    </div>
    <div id="tabs-2">
        <p>Content for Tab 2</p>
    </div>
    <div id="tabs-3">
        <p>Content for Tab 3</p>
    </div>
</div>

CSS

body {
    background-color: #eef;
}
#tabs {
    width: 95%;
    margin-left: auto;
    margin-right: auto;
    margin-top: 10px;
}

JQUERY

$("#tabs").tabs({
    activate: function (event, ui) {
       var active = $('#tabs').tabs('option', 'active');
       if(active == '0'){
        alert('the tab is 0')
        //put your ajax for this tab 0
       }
       else if(active == '1')
       {
        alert('the tab is 1')
        //put your ajax for this tab 1
       }
       else if(active == '2')
       {
        alert('the tab is 2')
        //put your ajax for this tab 2
       }
    }
});

这是的jsfiddle ,最好的问候。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM