javascript - 关闭选项卡时自动移至下一个/上一个 UL LI 选项卡

标签 javascript jquery tabs

我真的需要这个网站上的专家和代码专家的帮助,才能完成对我的技能水平来说似乎不可能的事情。我的目标是能够使用关闭按钮关闭选项卡,然后选定的选项卡将被关闭,下一个 View 将根据选项卡移动到右侧或左侧或右侧选项卡。

每次用户关闭选项卡时,默认操作都是自动选择左侧的相邻选项卡。

如果没有要关闭的选项卡,则 css 设置为显示的 UL LI 列表:无

因此,本质上,如何自动计算 EQ(#) 以达到该效果。我输入数字只是为了用作示例,但代码需要确定要选择的上一个选项卡是什么?

这是一个 fiddle :https://jsfiddle.net/5ju8rq8h/

这是 HTML/CSS:

<div id="main" style="display: inline-block; width: 983px;">
  <ul class="tabs">
    <div class="close_wrapper">
      <li><a href="#tab1">XAL-2017-482336</a><span class="close"></span></li>
    </div>
    <div class="close_wrapper">
      <li><a href="#tab2">A-2017-00471</a><span class="close"></span></li>
    </div>
    <div class="close_wrapper">
      <li><a href="#tab3">A-2017-00123</a><span class="close"></span></li>
    </div>
    <div class="close_wrapper">
      <li><a href="#tab4">A-2017-00456</a><span class="close"></span></li>
    </div>
  </ul>

  <div class="tab_container">
    <div class="tab_wrapper">

      <!--BEGIN DIV TAB 1 -->
      <div id="tab1" class="tab_content"></div>
      <!--END DIV TAB 1 -->

      <!--BEGIN DIV TAB 2 -->
      <div id="tab2" class="tab_content"></div>
      <!--END DIV TAB 2 -->

      <!--BEGIN DIV TAB 3 -->
      <div id="tab3" class="tab_content"></div>
      <!--END DIV TAB 3 -->

      <!--BEGIN DIV TAB 4 -->
      <div id="tab4" class="tab_content"></div>
      <!--END DIV TAB 4 -->

    </div>
    <!-- END DIV main  -->

以下是需要修改的代码:

function init_form() {

    //INITIALIZE TABS
    $(".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 rel attribute value to identify the active tab + content
        $(activeTab).fadeIn(); //Fade in the active content
        return false;       
    });

    $('span.close').on('click', function() {

        var tab = $(this).parent().find("a").attr("href") 
        //alert(tab)

        $(this).parent().remove()//Removes tab

        $(tab).hide().remove()//Remnoves content

        $("ul.tabs li").eq(1).click()//eq() is zero based

    });


}

最佳答案

https://jsfiddle.net/sudarpochong/5ju8rq8h/11/

close 事件处理程序进行了一些更改。 要查找上一个选项卡,我们需要找到当前选项卡的索引是什么。 并检查它是否处于事件选项卡。

  • 如果它是事件选项卡,请选择上一个选项卡(减 1)
  • (如果当前选项卡索引为 0 - 第一个选项卡,则移至下一个选项卡)
  • 如果它不是事件标签,只需关闭该标签

代码:

// Close click event handler
$('.close').on('click', function() {

  var tabId = $(this).parent().find("a").attr("href");
  // console.log("close clicked", tabId, this);

  // Find the parent li where close is invoked
  var parentLi = $(this).parent("li");
  // console.log("close clicked", this, parentLi);

  // Get the index of the li, and check if it's active tab
  var indexToClose = $("ul.tabs li").index(parentLi);
  var isActive = parentLi.hasClass("active");
  // console.log("close clicked, indexToClose?", indexToClose, "isActive?", isActive);

  var tabsLength = $("ul.tabs li").length;
  // If current tab is active, find the prev tab, otherwise do nothing (just close the tab)
  if (isActive) {
    var nextIndex = (indexToClose - 1);
    if (nextIndex < 0) {
        nextIndex = indexToClose + 1;
    }

    //console.log("close clicked", "tabs-length", tabsLength, "nextIndex", nextIndex);
    $("ul.tabs li").eq(nextIndex).find("a").click();
  }

  $(this).parent().remove(); // Removes tab
  $(tabId).remove(); // Removes content

    tabsLength = $("ul.tabs li").length;
  if (tabsLength == 0) {
    $(".tabs").hide();
    $(".tab_container").hide();
  }

});

关于javascript - 关闭选项卡时自动移至下一个/上一个 UL LI 选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47543876/

相关文章:

jquery - 如果在其他地方单击,则更改背景颜色

javascript - 将子 iframe 中的事件附加到父窗口中的处理程序

javascript - 修改导出时 Highcharts 的图例符号不起作用

javascript - 为什么我的 Angular 服务无法正常工作

javascript - javascript 遇到问题并使其与我现有的代码一起工作

javascript - Electron 标签意外地将所有标签源加载到同一个标签中

javascript - 使用 jQuery 停止表单提交

javascript - Angularjs - 文本区域自动增长

javascript - 如何将输入类型文件的数组保存在存储位置?

c# - mvvm 从加载的 View 模型中交叉执行方法