0

PFB is the example, Here I am using for Bootstrap Carousel control.

https://www.w3schools.com/bootstrap/tryit.asp?filename=trybs_carousel2&stacked=h

This example is working fine but when i am using tab key from the keyboard, control is not going on to anchor tag inside the div with class "carousel-caption".

I tried "tab-index" attribute for anchor tag to set the tabbing but tabbing is not working properly.

I want tabbing to work like below:

  • Left Arrow -> 1st anchor tag("LA is always so much fun!") -> 2nd anchor tag("Thank you, Chicago!") -> 3rd anchor tag("We love the Big Apple!") -> Right arrow

Could anyone please let me know how to implement tabbing for

<div id="myCarousel" class="carousel slide" data-ride="carousel">
    <!-- Indicators -->
    <ol class="carousel-indicators">
        <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
        <li data-target="#myCarousel" data-slide-to="1"></li>
        <li data-target="#myCarousel" data-slide-to="2"></li>
    </ol>

    <!-- Wrapper for slides -->
    <div class="carousel-inner">
        <div class="item active">
            <img src="C:\Users\user1\Desktop\Sample\video-bg-static1.png" alt="Los Angeles" style="width:100%;">
            <div class="carousel-caption">
                <h3>Los Angeles</h3>
                <a>LA is always so much fun!</a>
            </div>
        </div>

        <div class="item">
            <img src="C:\Users\user1\Desktop\Sample\video-bg-static2.png" alt="Chicago" style="width:100%;">
            <div class="carousel-caption">
                <h3>Chicago</h3>
                <a>Thank you, Chicago!</a>
            </div>
        </div>

        <div class="item">
            <img src="C:\Users\user1\Desktop\Sample\video-bg-static3.png" alt="New york" style="width:100%;">
            <div class="carousel-caption">
                <h3>New York</h3>
                <a>We love the Big Apple!</a>
            </div>
        </div>
    </div>

    <!-- Left and right controls -->
    <a class="left carousel-control" href="#myCarousel" data-slide="prev">
        <span class="glyphicon glyphicon-chevron-left"></span>
        <span class="sr-only">Previous</span>
    </a>
    <a class="right carousel-control" href="#myCarousel" data-slide="next">
        <span class="glyphicon glyphicon-chevron-right"></span>
        <span class="sr-only">Next</span>
    </a>
</div>
Akber Iqbal
  • 14,487
  • 12
  • 48
  • 70
Avinash
  • 2,053
  • 2
  • 14
  • 32

2 Answers2

1

You can't have tab index defined on an <li>, so we had to wrap our ul.carousel-indicators>li inside an anchor tag (which does work with tab index)...

Check the code which works with the same example and implements tabIndex as you wanted...

update: in light of questioner's comment, tab index now goes to the <p> under the heading on each slide instead of the carousel indicators; the href for these <a> tags to be updated by the user...

.carousel-indicators .active {
  border-radius: 50%;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>


<div class="container">
  <h2>Carousel Example</h2>
  <div id="myCarousel" class="carousel slide" data-ride="carousel">

    <!-- Wrapper for slides -->
    <div class="carousel-inner">

      <div class="item active">
        <img src="https://www.w3schools.com/bootstrap/la.jpg" alt="Los Angeles" style="width:100%;">
        <div class="carousel-caption">
          <h3>Los Angeles</h3>
          <a class="active" tabindex="2" href="#myCarousel" data-slide-to="0">
            <p>LA is always so much fun!</p>
          </a>
        </div>
      </div>

      <div class="item">
        <img src="https://www.w3schools.com/bootstrap/chicago.jpg" alt="Chicago" style="width:100%;">
        <div class="carousel-caption">
          <h3>Chicago</h3>
          <a class="" tabindex="3" href="#myCarousel" data-slide-to="1">
            <p>Thank you, Chicago!</p>
          </a>
        </div>
      </div>

      <div class="item">
        <img src="https://www.w3schools.com/bootstrap/ny.jpg" alt="New York" style="width:100%;">
        <div class="carousel-caption">
          <h3>New York</h3>
          <a class="" tabindex="4" href="#myCarousel" data-slide-to="2">
            <p>We love the Big Apple!</p>
          </a>
        </div>
      </div>

    </div>

    <!-- Indicators -->
    <ol class="carousel-indicators">
      <li class="" data-target="#myCarousel" data-slide-to="0">
      </li>
      <li class="" data-target="#myCarousel" data-slide-to="1">
      </li>
      <li class="" data-target="#myCarousel" data-slide-to="2">
      </li>
    </ol>

    <!-- Left and right controls -->
    <a class="left carousel-control" tabindex="1" href="#myCarousel" data-slide="prev">
      <span class="glyphicon glyphicon-chevron-left"></span>
      <span class="sr-only">Previous</span>
    </a>

    <a class="right carousel-control" tabindex="5" href="#myCarousel" data-slide="next">
      <span class="glyphicon glyphicon-chevron-right"></span>
      <span class="sr-only">Next</span>
    </a>
  </div>
</div>
Akber Iqbal
  • 14,487
  • 12
  • 48
  • 70
  • Akber thanks for your quick reply. As per your answer, control is going on to carousel indicators(dots below the carousel control) but i want the control goes on to the anchor tag(in this example, anchor tag of "LA is always so much fun!") in carousel caption. Can you please suggest me on this. – Avinash Aug 29 '19 at 16:18
  • @Avinash, Kindly check now – Akber Iqbal Aug 30 '19 at 01:22
0

According to your comment:

...Here I want to navigate between the carousel controls using the keyboard.

You can use keydown event. As reported in the documentation:

Keyboard events are only generated by , and anything with the contentEditable attribute or with tabindex="-1".

It's required to add tabindex="-1" to your carousel div plus the event handler.

$('#myCarousel').on('keydown', function(e) {
    if (e.keyCode == 37) {  // left arrow
        $('#myCarousel').carousel('prev')
    } else {
        if (e.keyCode == 39) {  // right arrow
            $('#myCarousel').carousel('next')
        }
    }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>


<div class="container">
    <div id="myCarousel" class="carousel slide" data-ride="carousel" tabindex="-1">
        <!-- Indicators -->
        <ol class="carousel-indicators">
            <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
            <li data-target="#myCarousel" data-slide-to="1"></li>
            <li data-target="#myCarousel" data-slide-to="2"></li>
        </ol>

        <!-- Wrapper for slides -->
        <div class="carousel-inner">
            <div class="item active">
                <img src="https://dummyimage.com/300x200/000/fff&text=1" alt="Los Angeles" style="width:100%;">

                <div class="carousel-caption">
                    <h3>Los Angeles</h3>
                    <a>LA is always so much fun!</a>
                </div>
            </div>

            <div class="item">
                <img src="https://dummyimage.com/300x200/000/fff&text=2" alt="Chicago" style="width:100%;">

                <div class="carousel-caption">
                    <h3>Chicago</h3>
                    <a>Thank you, Chicago!</a>
                </div>
            </div>

            <div class="item">
                <img src="https://dummyimage.com/300x200/000/fff&text=3" alt="New york" style="width:100%;">

                <div class="carousel-caption">
                    <h3>New York</h3>
                    <a>We love the Big Apple!</a>
                </div>
            </div>
        </div>

        <!-- Left and right controls -->
        <a class="left carousel-control" href="#myCarousel" data-slide="next">
            <span class="glyphicon glyphicon-chevron-left"></span>
            <span class="sr-only">Previous</span>
        </a>
        <a class="right carousel-control" href="#myCarousel" data-slide="prev">
            <span class="glyphicon glyphicon-chevron-right"></span>
            <span class="sr-only">Next</span>
        </a>
    </div>
</div>
gaetanoM
  • 41,594
  • 6
  • 42
  • 61
  • I think you misunderstood my question. Here I want to navigate between the carousel controls using the keyboard. please let me know if you have any idea on this – Avinash Aug 28 '19 at 23:17