【问题标题】:How to make bootstrap tabs only load content when clicked, not on page load如何使引导选项卡仅在单击时加载内容,而不是在页面加载时
【发布时间】:2019-03-23 21:10:39
【问题描述】:

我的用例是我写了一个包含 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。然后,当单击一个选项卡时,我希望它切换到该选项卡并“按需”加载上述功能。

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

【问题讨论】:

    标签: javascript php jquery html twitter-bootstrap


    【解决方案1】:

    我为标签使用了 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,致以最诚挚的问候。

    【讨论】:

    • 这可行,但我试图继续引导,因为整个网站都是引导程序。它使外观和感觉保持通用。但是看看代码,我认为它会很好用,但我需要帮助的是 AJAX 和 JQUERY/JAVA。我想我只需要分解并学习它们。但实际上这是我对它们的唯一用途。我边做边学,目前我没有其他东西可以使用它们。
    猜你喜欢
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多