Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用jQuery构建简单选项卡?_Javascript_Jquery_Html_Css_Tabs - Fatal编程技术网

Javascript 如何使用jQuery构建简单选项卡?

Javascript 如何使用jQuery构建简单选项卡?,javascript,jquery,html,css,tabs,Javascript,Jquery,Html,Css,Tabs,我有以下代码: 这在我自己创建的网站上非常有效,没有JS标签就可以作为相关部分的跳转链接。当放置在定制的CMS中时,我不得不在跳转链接不起作用的时候使用它。我尝试过在标签上添加更多的相对链接,这使得它在没有JS的情况下工作,但在JS的情况下,标签内容不会显示 我错过什么了吗 html: <ul id="tabs"> <li><a href="#tab1">test1</a></li> <li><

我有以下代码:

这在我自己创建的网站上非常有效,没有JS标签就可以作为相关部分的跳转链接。当放置在定制的CMS中时,我不得不在跳转链接不起作用的时候使用它。我尝试过在标签上添加更多的相对链接,这使得它在没有JS的情况下工作,但在JS的情况下,标签内容不会显示

我错过什么了吗

html:

<ul id="tabs">

      <li><a href="#tab1">test1</a></li>
      <li><a href="#tab2">test2</a></li>
      <li><a href="#tab3">test3</a></li>
      <li><a href="#tab4">test4</a></li>

</ul>
      <div class="container" id="tab1">Some content</div>
      <div class="container" id="tab2">Some content</div>
      <div class="container" id="tab3">Some content</div>
      <div class="container" id="tab4">Some content</div>
$('#tabs li a:not(:first)').addClass('inactive');
$('.container').hide();
$('.container:first').show();
$('#tabs li a').click(function(){
    var t = $(this).attr('href');
    $('#tabs li a').addClass('inactive');        
    $(this).removeClass('inactive');
    $('.container').hide();
    $(t).fadeIn('slow');
    return false;
})

if($(this).hasClass('inactive')){ //this is the start of our condition 
    $('#tabs li a').addClass('inactive');         
    $(this).removeClass('inactive');
    $('.container').hide();
    $(t).fadeIn('slow');    
}

我猜你的网站在href上有问题,我猜当用户点击a href时,网站会自动删除自己

我为您提供了一个新的解决方案:

更新jQuery:

$('#tabs li a').click(function(){
  var t = $(this).attr('id');

  if($(this).hasClass('inactive')){ //this is the start of our condition 
    $('#tabs li a').addClass('inactive');           
    $(this).removeClass('inactive');

    $('.container').hide();
    $('#'+ t + 'C').fadeIn('slow');
 }
});

新的html标记:

<ul id="tabs">

      <li><a id="tab1">test1</a></li>
      <li><a id="tab2">test2</a></li>
      <li><a id="tab3">test3</a></li>
      <li><a id="tab4">test4</a></li>

</ul>
<div class="container" id="tab1C">1Some content</div>
<div class="container" id="tab2C">2Some content</div>
<div class="container" id="tab3C">3Some content</div>
<div class="container" id="tab4C">4Some content</div>
  • 测试1
  • 测试2
  • 测试3
  • 测试4
1某些内容 2某些内容 3某些内容 4部分内容
}))

请参见演示:


$('.tabheading li')。单击(函数(){
var tabid=$(this.attr(“rel”);
$(this).parents('.tabcontainer').find('.active').removeClass('active');
$('.tabbody').hide();
$('#'+tabid).show();
$(this.addClass('active');
返回false;
});

单击解决方案JSFIDLE::

实现标签非常简单,我对HTML进行了一些修改,以解决您的问题。移除锚定标签,因为它们不需要

HTML

  • 表1
  • 表2
  • 表3
  • 表4
表1的一些内容 表2的一些内容 表3的一些内容 表4的一些内容
HTML解谜

  • 将“tab switcher”类添加到每个“li”元素以及tabindex=“0”以使其可访问
  • 为每个“li”指定一个“数据选项卡索引”属性
  • 将“tabcontainer”类添加到每个选项卡式容器中。还为每个容器提供一个“数据选项卡索引”属性,该属性对应于“li”元素上的“数据选项卡索引”属性
  • 仅显示要显示的容器,使用“显示:无”隐藏其他容器
  • 为选项卡式容器的所有内容提供父容器。在本例中,这是“allTabsContainer”div
  • jQuery

    jQuery解谜

  • “tab switcher”上的点击和按键侦听器在“document.ready”上初始化。(注意:按键仅注册“回车”键)
  • 变量“previousActiveTabIndex”跟踪上一个活动选项卡,因此,如果我们一次又一次地按同一选项卡,它可以被忽略
  • 我们在“选项卡容器”上运行EACH循环。这样做是为了知道应该显示哪个选项卡。如果每个选项卡上的“数据选项卡索引”数据属性匹配,则显示该选项卡
  • 我们保留保存在“previousActiveTabIndex”中的“data tab index”的值,这有助于跟踪单击的上一个选项卡
  • 如果有疑问或有人提出建议,请在帖子上发表评论。包括jquery:

    https://code.jquery.com/jquery-3.1.1.min.js
    
    HTML:

    JS:


    演示:

    具有自动播放功能的响应选项卡。这些不需要任何插件

    HTML

        <div class="row responsive-tab-wrapper">
            <div class="col-md-3 tab-items-list">
                <ul class="resp-tabs-list">
                    <li class="resp-tab-item">TAB 1</li>
                    <li class="resp-tab-item">TAB 2</li>
                    <li class="resp-tab-item">TAB 3</li>
                </ul>
            </div>
            <div class="col-md-9 resp-tabs-container">
                <div class="resp-tabs-container-item">
                    <div class="prod-tab-content">
                        <h4>TAB 1 TITLE</h4>
                        <p>
                            TAB 1 CONTENT
                        </p>
    
                    </div>
                </div>
                <div class="resp-tabs-container-item">
                    <div class="prod-tab-content">
                        <h4>TAB 2 TITLE</h4>
                        <p>
                            TAB 2 CONTENT
                        </p>
                    </div></div>
                <div class="resp-tabs-container-item">
                    <div class="prod-tab-content">
                        <h4>TAB 3 TITLE</h4>
                        <p>
                            TAB 3 CONTENT
                        </p>
                    </div>
                </div>
            </div>
        </div>
    
    jQuery

     $(function () {
            var startItemIndex = 0;
            var tabItemContainer = ".resp-tabs-container";
            var tabItemList = $(".resp-tabs-list");
            var tabInterval;
            var tabIntervalTime = 3000; //In milliseconds
            var stopOnHover = true;
    
            tabItemList.find(".resp-tab-item").each(function(index,val){
                var itemHeading = $(this).html();
                $(tabItemContainer).find(".resp-tabs-container-item").eq(index).before('<h3 class="resp-accordion" data-listindex="'+index+'"><span class="resp-arrow"></span>'+itemHeading+'</h3>');
            });
    
            $(tabItemContainer).find(".resp-tabs-container-item h3.resp-accordion").on("click", function () {
                    var itemIndex = $(this).index();
                    changeIndex(itemIndex);
                    clearInterval(tabInterval);
                    startAutoTab();
                });
    
            function changeIndex(itemIndex) {
                tabItemList.find(".resp-tab-item").removeClass("resp-tab-active");
                tabItemList.find(".resp-tab-item:eq(" + itemIndex + ")").addClass("resp-tab-active");
    
                if($(window).width()<980){
                    $(tabItemContainer).find(".resp-tabs-container-item").slideUp();
                    $(tabItemContainer).find(".resp-tabs-container-item:eq(" + itemIndex + ")").stop().slideDown();
                }else{
                    $(tabItemContainer).find(".resp-tabs-container-item").hide();
                    $(tabItemContainer).find(".resp-tabs-container-item:eq(" + itemIndex + ")").stop().fadeIn();
                }
    
                $(tabItemContainer).find("h3.resp-accordion").removeClass("resp-tab-active");
                $(tabItemContainer).find("h3.resp-accordion").eq(itemIndex).addClass("resp-tab-active");
    
            }
            changeIndex(startItemIndex);
            tabItemList.find(".resp-tab-item").on("click", function () {
                var itemIndex = $(this).index();
                changeIndex(itemIndex);
                clearInterval(tabInterval);
                startAutoTab();
            });
    
            $(document).find(tabItemContainer).find("h3.resp-accordion").on("click", function () {
                var itemIndex = $(this).attr("data-listindex");
                changeIndex(itemIndex);
                clearInterval(tabInterval);
                startAutoTab();
            });
            function startAutoTab() {
                tabInterval = setInterval(function () {
                    var isHovered = false;
                    if(stopOnHover)
                    isHovered = ($('ul.resp-tabs-list').is(":hover") || $('div.resp-tabs-container').is(":hover"));
                    if (!isHovered) {
                        var totalTabs = tabItemList.find(".resp-tab-item").length;
                        if (totalTabs == ($("ul.resp-tabs-list .resp-tab-item.resp-tab-active").index() + 1)) {
                            $(".resp-tab-item").eq(0).trigger("click");
                        } else {
                            $(".resp-tab-item.resp-tab-active").next().trigger("click");
                        }
                    }
                }, tabIntervalTime);
            }
            startAutoTab();
        });
    
    $(函数(){
    var startItemIndex=0;
    var tabItemContainer=“.resp tabs container”;
    var tabItemList=$(“.resp tabs list”);
    var-tabInterval;
    var tabIntervalTime=3000;//以毫秒为单位
    var stopOnHover=true;
    tabItemList.find(“.resp tab item”)。每个(函数(索引,val){
    var itemHeading=$(this.html();
    $(tabItemContainer).find(“”+itemHeading+“”)之前的(“.resp tabs container item”).eq(index.);
    });
    $(tabItemContainer).find(“.resp tabs container item h3.resp accordion”).on(“单击”,函数(){
    var itemIndex=$(this.index();
    变更索引(itemIndex);
    clearInterval(tabInterval);
    startAutoTab();
    });
    函数变更索引(itemIndex){
    tabItemList.find(“.resp tab item”).removeClass(“resp tab active”);
    tabItemList.find(“.resp-tab-item:eq(“+itemIndex+”)).addClass(“resp-tab-active”);
    
    if($(窗口).width()我确信这在其他网站上运行良好,我不知道为什么所有的跳转链接都被重新定向到主页。我想我最好联系开发人员你的网站链接是什么?你是对的,我猜是有其他东西阻止了它,但是要小心如果条件,在你的例子中,你使用它是错误的。仔细检查我的条件在网站上的位置例如。这不是我的网站,如果有帮助的话,我可以私下给你发一个链接,但作为它的商业链接,我不确定我是否可以发布在这里。不幸的是,它在网站上不起作用。我将不得不回到开发者那里。感谢你的帮助,我将标记为已回答,因为它是有效的代码,一个很好的回答在我的系统中不起作用我被迫使用它很好!但不适用于添加了Dynamicly的html。这篇文章展示了如何创建简单的选项卡:这是一个很好的答案。这个想法的问题是没有可访问性。用户不能使用键盘。@RicardoZea我已经更新了JSFIDLE以及代码,使其可以通过键盘访问。谢谢您的反馈。@incorelaB很好,谢谢你的修改。将我的投票改为upvote。@RicardoZea对此表示感谢。:)这个想法的问题是没有可访问性。用户不能使用键盘。
    https://code.jquery.com/jquery-3.1.1.min.js
    
    <br>
    <div align="center" >
      <button data-toggle="tab" data-tabs=".gtabs.demo" data-tab=".tab-1" class="btn btn-info" >Tab 1</button>
      <button data-toggle="tab" data-tabs=".gtabs.demo" data-tab=".tab-2" class="btn btn-info" >Tab 2</button>
      <button data-toggle="tab" data-tabs=".gtabs.demo" data-tab=".tab-3" class="btn btn-info" >Tab 3</button>
    </div>
    <br />
    <div class="gtabs demo" >
      <div class="gtab active tab-1">
        <h1>Gtab 1</h1>
      <button data-toggle="tab" data-tabs=".gtabs.demo" data-tab=".tab-2" class="ui button" >Tab 2</button>
      </div>
    
      <div class="gtab tab-2">
        <h1>Gtab 2</h1>
        <p>
          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi minima fugit, est facere molestiae quod pariatur. Consectetur natus, blanditiis laborum possimus doloremque harum adipiscelit. Nisi minima fugit, est facere molestiae quod pariatur. Consectetur natus, blanditiis laborum possimus doloremque harum adipisci debitis similique, nostrum provident ut dolelit. Nisi minima fugit, est facere molestiae quod pariatur. Consectetur natus, blanditiis laborum possimus doloremque harum adipisci debitis similique, nostrum provident ut dolelit. Nisi minima fugit, est facere molestiae quod pariatur. Consectetur natus, blanditiis laborum possimus doloremque harum adipisci debitis similique, nostrum provident ut doli debitis similique, nostrum provident ut dolore.
        </p>
      </div>
    
      <div class="gtab tab-3">
        <h1>Gtab 3</h1>
      </div>
    </div>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi consequatur qui nostrum deleniti, quaerat. Voluptate quisquam nulla, sit error, quas mollitia sint veniam at rem corporis dolore, eaque sapiente qui.
    </p>
    
    .gtabs {
      position: relative;
      .gtab {
        background: #eee;
        position: absolute;
        width: 100%;
        opacity: 0;
        visibility: hidden;
        padding: 10px;
        top: 5px;
        transition: all 0.4s;
        &.active {
          opacity: 1;
          visibility: visible;
          top: 0;
          transition: all 0.4s;
        }
      }
    }
    
    $("[data-toggle='tab']").click(function () {
      var tabs = $(this).attr('data-tabs');
      var tab = $(this).attr("data-tab");
      $(tabs).find(".gtab").removeClass("active");
      $(tabs).find(tab).addClass("active");
    });
    
        <div class="row responsive-tab-wrapper">
            <div class="col-md-3 tab-items-list">
                <ul class="resp-tabs-list">
                    <li class="resp-tab-item">TAB 1</li>
                    <li class="resp-tab-item">TAB 2</li>
                    <li class="resp-tab-item">TAB 3</li>
                </ul>
            </div>
            <div class="col-md-9 resp-tabs-container">
                <div class="resp-tabs-container-item">
                    <div class="prod-tab-content">
                        <h4>TAB 1 TITLE</h4>
                        <p>
                            TAB 1 CONTENT
                        </p>
    
                    </div>
                </div>
                <div class="resp-tabs-container-item">
                    <div class="prod-tab-content">
                        <h4>TAB 2 TITLE</h4>
                        <p>
                            TAB 2 CONTENT
                        </p>
                    </div></div>
                <div class="resp-tabs-container-item">
                    <div class="prod-tab-content">
                        <h4>TAB 3 TITLE</h4>
                        <p>
                            TAB 3 CONTENT
                        </p>
                    </div>
                </div>
            </div>
        </div>
    
        .responsive-tab-wrapper{
            -webkit-box-shadow: 0px 3px 25px -5px rgba(0,0,0,0.75);
            -moz-box-shadow: 0px 3px 25px -5px rgba(0,0,0,0.75);
            box-shadow: 0px 3px 25px -5px rgba(0,0,0,0.75);
            margin-top: 50px;
            padding: 15px
        }
        .resp-tabs-container{
            padding: 30px;
    
        }    
        .resp-tabs-list {
            padding: 0;
        }
    
        .resp-tabs-list i {
            margin-right: 15px;
            font-size: 24px;
        }
    
        .resp-tabs-list li {
            cursor: pointer;
            border-bottom: solid 1px #e4eae1;
            line-height: 55px;
            padding-left: 15px;
            font-weight: 300;
            font-size: 18px;
            /* transition: all 0.5s ease; */
            -webkit-transition: all 0.5s ease;
            -moz-transition: all 0.5s ease;
            -o-transition: all 0.5s ease;
            font-family: 'Hammersmith One', sans-serif;
            text-transform: uppercase;
            border-left: solid 2px #fff;
            list-style: none;
            white-space: nowrap; 
            overflow: hidden;
            text-overflow: ellipsis;
        }
    
        .resp-tabs-list li:hover,
        .resp-tabs-list li.resp-tab-active,
        h3.resp-accordion:hover {
            background-color: #ffffff;
            /* border-bottom: 1px solid #BFE1B1; */
            border-left: solid 2px #3bc500;
    
        }
    
    
    
        h3.resp-tab-active,
        h3.resp-tab-active:hover {
            border-bottom: 1px solid #e7edee;
        }
    
        h3.resp-accordion {
            cursor: pointer;
            font-size: 18px;
            display: none;
            font-weight: 300;
            border-bottom: 1px solid #e7edee;
            margin: 0;
            line-height: 66px;
            transition: all 0.7s ease;
            -webkit-transition: all 0.7s ease;
            -moz-transition: all 0.7s ease;
            -o-transition: all 0.7s ease;
        }
    
        h3.resp-accordion:hover {}
    
        .resp-tab-content {
            display: none;
        }
    
        .resp-content-active,
        .resp-accordion-active {
            display: block;
        }
    
    
        /*-----------Vertical tabs-----------*/
        .resp-arrow {
            width: 0;
            height: 0;
            float: right;
            margin-top: 27px;
            margin-right: 15px;
            border-left: 5px solid transparent;
            border-right: 5px solid transparent;
            border-top: 7px solid;
        }
    
        h3.resp-tab-active span.resp-arrow {
            border: none;
            border-left: 5px solid transparent;
            border-right: 5px solid transparent;
            border-bottom: 7px solid;
        }
    
        /*-----------Accordion styles-----------*/
        h3.resp-tab-active {
            background: #dbfdcc;
            /* !important;*/
            border-color: #d3efc8;
        }
    
        .resp-easy-accordion h3.resp-accordion {
            display: block;
        }
    
        .resp-jfit {
            width: 100%;
            margin: 0px;
        }
    
        .resp-tab-content-active {
            display: block;
            background: #e7edee;
            padding: 0 25px 25px;
        }
    
        .prod-tab-content img{
            width: 300px;
            float: right;
        }
    
        /*Here your can change the breakpoint to set the accordion, when screen resolution changed*/
        @media only screen and (max-width: 980px) {
            ul.resp-tabs-list {
                display: none;
            }
    
            h3.resp-accordion {
                display: block;
                padding-left: 25px;
            }
            .resp-accordion-closed {
                display: none !important;
            }
            .prod-tab-content{
                padding: 10px;
            }
        }
    
     $(function () {
            var startItemIndex = 0;
            var tabItemContainer = ".resp-tabs-container";
            var tabItemList = $(".resp-tabs-list");
            var tabInterval;
            var tabIntervalTime = 3000; //In milliseconds
            var stopOnHover = true;
    
            tabItemList.find(".resp-tab-item").each(function(index,val){
                var itemHeading = $(this).html();
                $(tabItemContainer).find(".resp-tabs-container-item").eq(index).before('<h3 class="resp-accordion" data-listindex="'+index+'"><span class="resp-arrow"></span>'+itemHeading+'</h3>');
            });
    
            $(tabItemContainer).find(".resp-tabs-container-item h3.resp-accordion").on("click", function () {
                    var itemIndex = $(this).index();
                    changeIndex(itemIndex);
                    clearInterval(tabInterval);
                    startAutoTab();
                });
    
            function changeIndex(itemIndex) {
                tabItemList.find(".resp-tab-item").removeClass("resp-tab-active");
                tabItemList.find(".resp-tab-item:eq(" + itemIndex + ")").addClass("resp-tab-active");
    
                if($(window).width()<980){
                    $(tabItemContainer).find(".resp-tabs-container-item").slideUp();
                    $(tabItemContainer).find(".resp-tabs-container-item:eq(" + itemIndex + ")").stop().slideDown();
                }else{
                    $(tabItemContainer).find(".resp-tabs-container-item").hide();
                    $(tabItemContainer).find(".resp-tabs-container-item:eq(" + itemIndex + ")").stop().fadeIn();
                }
    
                $(tabItemContainer).find("h3.resp-accordion").removeClass("resp-tab-active");
                $(tabItemContainer).find("h3.resp-accordion").eq(itemIndex).addClass("resp-tab-active");
    
            }
            changeIndex(startItemIndex);
            tabItemList.find(".resp-tab-item").on("click", function () {
                var itemIndex = $(this).index();
                changeIndex(itemIndex);
                clearInterval(tabInterval);
                startAutoTab();
            });
    
            $(document).find(tabItemContainer).find("h3.resp-accordion").on("click", function () {
                var itemIndex = $(this).attr("data-listindex");
                changeIndex(itemIndex);
                clearInterval(tabInterval);
                startAutoTab();
            });
            function startAutoTab() {
                tabInterval = setInterval(function () {
                    var isHovered = false;
                    if(stopOnHover)
                    isHovered = ($('ul.resp-tabs-list').is(":hover") || $('div.resp-tabs-container').is(":hover"));
                    if (!isHovered) {
                        var totalTabs = tabItemList.find(".resp-tab-item").length;
                        if (totalTabs == ($("ul.resp-tabs-list .resp-tab-item.resp-tab-active").index() + 1)) {
                            $(".resp-tab-item").eq(0).trigger("click");
                        } else {
                            $(".resp-tab-item.resp-tab-active").next().trigger("click");
                        }
                    }
                }, tabIntervalTime);
            }
            startAutoTab();
        });