私はbootstrap 4.0.0で構築を開始したプロジェクトに取り組んでいます。このプロジェクト中に、bootstrapの新しいバージョン(4.1.0、4.1.3)が来るたびにbootstrapを定期的に更新し、bootstrap 4.2.1そこからドキュメントをクリックすると、コンソールでエラーが発生しました
キャッチされていないDOMException:「ドキュメント」で「querySelector」の実行に失敗しました:「javascript:void(0);」有効なセレクタではありません。
このエラーによりドロップダウンが機能しないため、ドロップダウンが原因で発生することがわかりました。また、href = "javascript:void(0);"、href =を使用していることも確認しました「#!」エラーが発生しますが、hrefまたはhref = "#"なしでアンカータグを使用すると、正常に動作します。
注:-href = "javascript:void(0);ashref = "#asアドレスリンクがきれいに見えず、ページが上にスクロールする
<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 です
ここに私のために働く解決策があります
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ソリューションのおかげ
詳細はこちらをご覧ください https://github.com/twbs/bootstrap/issues/27903#issuecomment-449600715
私はこの問題を抱えていましたが、これについてのコメント 報告された問題 で解決策を見つけました。 Bootstrapドキュメントからサンプルをコピーしていたので、親リンクからIDを削除し、代わりにaria-labeledbyプロパティなしで、子リンクのコンテナにそのIDを追加する必要がありました。親リンクのデータターゲットプロパティ内の参照。
次の例は、コンソールエラーの原因となった操作を示しています。
<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>
提案:
空の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>
=== 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;
},
次のようにのみtry and catch例外を追加する必要があります
交換
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;}