How to trigger a Bootstrap dropdown when pressing tab key

Viewed 1083

Is it possible to open a Bootstrap dropdown by pressing tab? The input box in the snippet below is only for example. What I want to happen after the page loads, input box is given the focus. Then when I press tab a drop down will occur.

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>

  <div class="form-group">
    <label for="exampleInputEmail1">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
    <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
  </div>

<div class="dropdown show">
  <a class="btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Dropdown link
  </a>

  <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
    <a class="dropdown-item" href="#">Action</a>
    <a class="dropdown-item" href="#">Another action</a>
    <a class="dropdown-item" href="#">Something else here</a>
  </div>
</div>

2 Answers

Not sure if i understands your question correctly, is this what you are searching for?

So when you are in the input field and press the TAB button, the dropdown-menu will open.

$('#exampleInputEmail1').focus();

$('input[name=input]').on('keydown', function(evt) {
  if (evt.key === 'Tab') {
    evt.preventDefault();
    if ($('.dropdown').find('.dropdown-menu').is(":hidden")) {
      $('.dropdown-toggle').dropdown('toggle');
    }
  }
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>

<div class="form-group">
  <label for="exampleInputEmail1">Email address</label>
  <input type="email" class="form-control" id="exampleInputEmail1" name="input" aria-describedby="emailHelp" placeholder="Enter email">
  <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
</div>

<div class="dropdown show">
  <a class="btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Dropdown link
  </a>

  <div id="menu" class="dropdown-menu" aria-labelledby="dropdownMenuLink">
    <a class="dropdown-item" href="#">Action</a>
    <a class="dropdown-item" href="#">Another action</a>
    <a class="dropdown-item" href="#">Something else here</a>
  </div>
</div>

Add a div nav nav-tabs to parent of dropdown items also add attribute data-toggle="tab" to each dropdown items.then active class to active the tab item. Then,

<div class="tab-content">
 <div id="email" class="tab-pane fade in active show">
   // id given as first dropdown item.
   --------- first tab content here-------------------
 </div>
 <div id="email" class="tab-pane fade in">
   // id given as second dropdown item.
   --------- second tab content here-------------------
 </div>
 and so on,
</div>

One thing remember add active show classes first item to show the tab item.

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>

<div class="tab-content">
 <div id="email" class="tab-pane fade in active show">
  <div class="form-group p-2">
   <label for="exampleInputEmail1">Email address :</label>
   <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Please enter email address">
   <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
  </div>
 </div>

 <div id="phone" class="tab-pane fade in">
  <div class="form-group p-2">
   <label for="exampleInputEmail1">Phone number :</label>
   <input type="text" class="form-control" id="exampleInputPhone" aria-describedby="PhoneHelp" placeholder="Please enter phone number..">
   <small id="PhoneHelp" class="form-text text-muted">We'll never share your phone number with anyone else.</small>
  </div>
 </div>

 <div id="name" class="tab-pane fade in">
  <div class="form-group p-2">
   <label for="exampleInputEmail1">Name :</label>
   <input type="text" class="form-control" id="exampleInputName" aria-describedby="NameHelp" placeholder="Please enter full name..">
   <small id="NameHelp" class="form-text text-muted">We'll never share your name with anyone else.</small>
  </div>
 </div>

</div>
<div class="dropdown show p-2">
 <a class="btn btn-success dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  Click Here
 </a>

 <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
  <div class="nav nav-tabs">
   <a class="dropdown-item active" href="#email" data-toggle="tab">Email</a>
   <a class="dropdown-item" href="#phone"  data-toggle="tab">Phone</a>
   <a class="dropdown-item" href="#name"  data-toggle="tab">Name</a>
  </div>
 </div>
</div>

Related