Bootstrap 4.2.1 - Не удалось выполнить «querySelector» для «Документа»: «javascript: void (0);»не является действительным селектором - PullRequest
0 голосов
/ 25 декабря 2018

Я работаю над проектом, который я начал строить на bootstrap 4.0.0 .Во время этого проекта я обновлял стандартную версию начальной загрузки всякий раз, когда приходили новые версии начальной загрузки (4.1.0, 4.1.3), и все работало отлично, пока я не обновлюсь до начальной загрузки 4.2.1 .обнаружена ошибка в консоли, когда я нажимаю на документ

Uncaught DOMException: не удалось выполнить 'querySelector' для 'Document': 'javascript: void (0);'не является допустимым селектором.

Я выяснил, что это происходит из-за раскрывающегося списка, из-за этой ошибки раскрывающийся список не работает.Я также проверил, что если я использую href = "javascript: void (0);" , href = "#!" ошибка возникает, но если я использую тег привязки без hrefили href = "#", тогда он работает нормально.

Примечание: - Мне нужно решение с href = "javascript: void (0); как href = "# в адресной ссылке выглядит не очень красиво и страница прокручивается вверх

<div class="dropdown">
        <a class="btn btn-secondary dropdown-toggle" href="javascript:void();" 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>

Вот мой codepen

Ответы [ 4 ]

0 голосов
/ 27 июня 2019

=== Изменение в bootstrap.js v4.2.1 ===

Найти блок ниже

getSelectorFromElement: function getSelectorFromElement(element) {
  var selector = element.getAttribute('data-target');

  if (!selector || selector === '#') {
    var hrefAttr = element.getAttribute('href');
    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
  }

  return selector && document.querySelector(selector) ? selector : null;
},

Необходимо добавить исключение только для попыток и поймать, как показано ниже

Заменить

return selector && document.querySelector(selector) ? selector : null;

на

try {
    return selector && document.querySelector(selector) ? selector : null;
} catch (err) {
    return null;
}

=== Изменение в bootstrap.min.js v4.2.1 ===

Заменить

return e&&document.querySelector(e)?e:null

с

try{return e&&document.querySelector(e)?e:null}catch(err){return null;}
0 голосов
/ 11 января 2019

У меня была эта проблема, и комментарий к этой сообщенной проблеме подсказал мне решение проблемы.Я копировал пример из документации Bootstrap, и мне пришлось удалить идентификатор из родительской ссылки, а вместо этого иметь этот идентификатор в контейнере для дочерних ссылок без свойства aria-labeleledby и добавить ссылку в родительскую ссылкусвойство data-target.

В этом примере показано, что я делал, что привело к ошибкам консоли:

<li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" href="/Summary/Commercial" data-target="#" data-toggle="dropdown" id="navToggleCommercial" role="button" aria-haspopup="true" aria-expanded="false">
        Commercial
    </a>
    <div class="dropdown-menu" aria-labelledby="navToggleCommercial">
        <a class="dropdown-item" href="/Summary/Dashboard">Dashboard</a>
    </div>
</li>

Это решение, которое сработало для меня:

<li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" href="/Summary/Commercial" data-target="#navToggleCommercial" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
        Individual
    </a>
    <div class="dropdown-menu" id="navToggleCommercial">
        <a class="dropdown-item" href="/Summary/Dashboard">Dashboard</a>
    </div>
</li>
0 голосов
/ 26 января 2019

Вот решение, которое работает для меня

Фрагмент из Bootstrap 4.1.3

getSelectorFromElement: function getSelectorFromElement(element) {
    var selector = element.getAttribute('data-target');

    if (!selector || selector === '#') {
      selector = element.getAttribute('href') || '';
    }

    try {
      return document.querySelector(selector) ? selector : null;
    } catch (err) {
      return null;
    }
},

Замените его из Bootstrap 4.2.1

getSelectorFromElement: function getSelectorFromElement(element) {
  var selector = element.getAttribute('data-target');

  if (!selector || selector === '#') {
    var hrefAttr = element.getAttribute('href');
    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
  }

  return selector && document.querySelector(selector) ? selector : null;
},

БлагодаряPixemWeb Github Solution

Для получения дополнительной информации здесь ссылка https://github.com/twbs/bootstrap/issues/27903#issuecomment-449600715

0 голосов
/ 25 декабря 2018

Подсказка:

Удалите пустой атрибут href и добавьте стиль cursor:pointer, чтобы сделать элемент A интерактивным.

#dropdownMenuLink {
  cursor: pointer; /* not necessary for Bootstrap */
  color: white /* change if you want */
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">

<div class="dropdown">
  <a class="btn btn-secondary dropdown-toggle" 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>

<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.bundle.min.js" integrity="sha384-3ziFidFTgxJXHMDttyPJKDuTlmxJlwbSkojudK/CkRqKDOmeSbN6KLrGdrBQnT2n" crossorigin="anonymous"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...