Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • B bootstrap
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 263
    • Issues 263
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 114
    • Merge requests 114
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Bootstrap
  • bootstrap
  • Issues
  • #31166
Closed
Open
Issue created Jun 25, 2020 by Administrator@rootContributor

[BS4.5] Button toolbar not working with Navs

Created by: marceloverdijk

Maybe this is not a real bug report but a feature request.

I'm trying to use Bootstrap Navs with JavaScript behaviour but instead of the tabs and pill I would like to have button toolbar.

Now with a simple toolbar this works:

  <div class="nav btn-toolbar" role="tablist">
    <a class="nav-link btn btn-secondary active" role="button" data-toggle="tab" href="#home-tab">Home</a>
    <a class="nav-link btn btn-secondary" role="button" data-toggle="tab" href="#profile-tab">Profile</a>
    <a class="nav-link btn btn-secondary" role="button" data-toggle="tab" href="#contact-tab">Contact</a>
  </div>
  
  <div class="tab-content">
    <div class="tab-pane fade show active" id="home-tab" role="tabpanel">
      Home...
    </div>
    <div class="tab-pane fade" id="profile-tab" role="tabpanel">
      Profile...
    </div>
    <div class="tab-pane fade" id="contact-tab" role="tabpanel">
      Contact...
    </div>
  </div>

I'm applying the nav and nav-link classes and the tab behaviour kicks in.

Now I wanted to go a but further with a grouped button toolbar like:

  <div class="nav btn-toolbar mb-3" role="tablist">
    <div class="btn-group mr-2" role="group">
      <a class="nav-link btn btn-secondary active" role="button" data-toggle="tab" href="#home-tab">Home</a>
      <a class="nav-link btn btn-secondary" role="button" data-toggle="tab" href="#profile-tab">Profile</a>
    </div>
    <div class="btn-group" role="group">
      <a class="nav-link btn btn-secondary" role="button" data-toggle="tab" href="#contact-tab">Contact</a>
    </div>
  </div>

The first time I navigate to each tab (using the toolbar buttons) works, but as soon as I want to navigate to a tab the second time it doesn't work.

The reason it does show the tab again is that the navlink anchor in the toolbar was still .active. The .active class was never removed as it is only looking for children under the .nav div:

https://github.com/twbs/bootstrap/blob/v4-dev/js/src/tab.js#L137-L140

  _activate(element, container, callback) {
    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL')
      ? $(container).find(SELECTOR_ACTIVE_UL)
      : $(container).children(SELECTOR_ACTIVE)

    ..

    if (active && isTransitioning) {
      const transitionDuration = Util.getTransitionDurationFromElement(active)

      $(active)
        .removeClass(CLASS_NAME_SHOW)
        .one(Util.TRANSITION_END, complete)
        .emulateTransitionEnd(transitionDuration)
    } else {
      complete()
    }

Now I wonder if it would as simple to change:

$(container).children(SELECTOR_ACTIVE)

to:

$(container).find(SELECTOR_ACTIVE)

I think it would be nice to be able to navigate tabbed tabbed content with other Bootstrap controls like this.

Bug reports must include:

  • Operating system and version: macOS 10.15.5
  • Browser and version: Chrome 83.0.4103.116
  • Test case: https://jsfiddle.net/marceloverdijk/5eznyvua/
Assignee
Assign to
Time tracking