Как создать и открыть раскрывающийся список bootstrap вручную? - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь создать bootstrap раскрывающийся список, используя jquery, но я застреваю при открытии, используя .dropdown ('toggle') метод.

Я могу откройте его, когда я дважды нажму.

Вот что я пробовал:

$('a').on('click', function (e) {
  e.preventDefault();
  
  var $self = $(this);
  
  if ($self.parent().hasClass('dropdown')) return;
  
  // data-toggle attribute is still required
  $self.attr('data-toggle', 'dropdown').wrap('<div class="dropdown">');
  
  $self.parent().append(`
      <div class="dropdown-menu">
          <a class="dropdown-item" href="#">Item 1</a>
      </div>
  `);

  $self.dropdown().dropdown('toggle');
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>

<a href="#">Click me</a>

Ответы [ 2 ]

3 голосов
/ 05 февраля 2020

Я думаю, вам вообще не нужно вызывать .dropdown ():

$('a').on('click', function(e) {
  e.preventDefault();

  var $self = $(this);

  if ($self.parent().hasClass('dropdown')) return;

  // data-toggle attribute is still required
  $self.attr('data-toggle', 'dropdown').wrap('<div class="dropdown">');
  $self.parent().append(`
  <div class="dropdown-menu">
      <a class="dropdown-item" href="#">Item 1</a>
  </div>
  `);
});
			
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>

<a href="#">Click me</a>
0 голосов
/ 05 февраля 2020

В этом случае я рекомендую заключить оператор в функцию setInterval, так как вы не знали, когда выпадающий список готов к запуску этого метода.

$('a').on('click', function (e) {
  e.preventDefault();
  
  var $self = $(this);
  
  // data-toggle attribute is still required
  $self.attr('data-toggle', 'dropdown').wrap('<div class="dropdown">');
  
  $self.parent().append(`
      <div class="dropdown-menu">
          <a class="dropdown-item" href="#">Item 1</a>
      </div>
  `);

  $self.dropdown();
  
  // this does not work immediately
  $self.dropdown('toggle');

  var $dropdown = $self.parent();
  
  var interval = setInterval(function () {
      $self.dropdown('toggle');

      if ($dropdown.hasClass('show')) {
          clearInterval(interval);
      }
  }, 10);
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>

<a href="#">Click me</a>
...