javascript - 如何使 Bootstrap 选项卡仅在单击时加载内容,而不是在页面加载时加载

标签 javascript php jquery html twitter-bootstrap

我的用例是我编写了一个包含 6 个选项卡的页面。这些选项卡加载我创建的 php 文件索引函数的结果。当我将 USB 驱动器上的文件直接连接到服务器时,一切都很好。在几秒钟内加载页面。但是,我已将文件移动到 NAS 存储驱动器,现在加载页面需要 30-60 多秒。那是因为使用 Bootstrap 选项卡,它会在页面加载时加载所有选项卡。因此它必须在页面加载完成之前加载所有选项卡的所有文件。

我想要做的是让它只加载“当前”选项卡。我知道我可以每次都使用 $POST 并重新加载页面,但老实说,我认为我真正需要做的是使用 AJAX。但我发现的示例令人困惑,我无法调整它们以使其对​​我有用。

这是我想要发生的事情:

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

这是 Bootstrap 选项卡链接的示例:

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

我想我需要做的是向这个调用 AJAX 函数的链接添加一个 onclick,然后它会依次调用将在该选项卡上显示的选项卡的 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/ Bootstrap 标签

<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 , 最好的问候。

关于javascript - 如何使 Bootstrap 选项卡仅在单击时加载内容,而不是在页面加载时加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52884516/

相关文章:

jquery - 如何在 JVectorMap 中设置缩放级别

javascript - 用正则表达式将多个字符替换为一个字符

javascript - 如何在 Chromecast 中使用 blob url?

javascript - 为什么 prototype.js 会干扰不相关的 javascript 操作?

javascript - 使用 Javascript 创建帐户

php - 用 PHP 检查 URL 是否有特定的字符串

jquery - 计算不包含特定类的元素

javascript - VBScript CreateObject() 的等效 JavaScript 函数是什么

php - 数组返回同一行的 43 个实例 - CodeIgniter PHP MySQL

Javascript - 悬停时 Bootstrap 下拉菜单打开子菜单的所有菜单级别