別のドロップダウンのアイテムをクリックすると、Bootstrapドロップダウンを開こうとしています。
アイデアは、最初のドロップダウンから都市を選択することです-その後、スクリプトはエリアを含む2番目のドロップダウンを自動的に開きます(選択した都市に対応するエリアのみを表示します)。
これが私のJSです。
$('#sidebar_filter_city li').click(function(){
$('#sidebar_filter_areas').dropdown('toggle');
});
これがHTMLです:
<div class="dropdown form-control">
<div data-toggle="dropdown" id="sidebar_filter_cities" class="sidebar_filter_menu" data-value="jersey-city">Jersey City<span class="caret caret_sidebar"></span></div>
<input type="hidden" name="advanced_city" value="jersey-city">
<ul id="sidebar_filter_city" class="dropdown-menu filter_menu" role="menu" aria-labelledby="sidebar_filter_cities">
<li role="presentation" data-value="">All Cities</li>
<li role="presentation" data-value="jersey-city">Jersey City</li>
<li role="presentation" data-value="london">London</li>
<li role="presentation" data-value="new-york">New York</li>
</ul>
</div>
</div>
<div class="dropdown form-control">
<div data-toggle="dropdown" id="sidebar_filter_areas" class="sidebar_filter_menu">All Areas<span class="caret caret_sidebar"></span> </div>
<input type="hidden" name="advanced_area" value="">
<ul id="sidebar_filter_area" class="dropdown-menu filter_menu" role="menu" aria-labelledby="sidebar_filter_areas">
<li role="presentation" data-value="">All Areas</li>
<li role="presentation" data-value="east-harlem" data-parentcity="">East Harlem</li>
<li role="presentation" data-value="greenville" data-parentcity="">Greenville</li>
<li role="presentation" data-value="manhattan" data-parentcity="">Manhattan</li>
<li role="presentation" data-value="northern-brooklyn" data-parentcity="">Northern Brooklyn</li>
.....
</ul>
</div>
</div>
最良の方法は、ドロップダウンがまだ開いていないかどうかを確認し、.dropdown('toggle')
を使用することです。
知っておくべきいくつかのこと:
$('.dropdown').addClass('open')
は、他の回答で提案されている$('.dropdown-toggle').dropdown('toggle')
の適切な代替ではありません。コンポーネントをクリックして閉じると、ドロップダウンが閉じずに永久に開いたままになるためです。HTML:
<button class="btn btn-secondary trigger_button">Trigger dropdown</button><br><br>
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown">
Dropdown
</button>
<div class="dropdown-menu">
Stuff...
</div>
</div>
JS:
$('.trigger_button').click(function(e){
// Kill click event:
e.stopPropagation();
// Toggle dropdown if not already visible:
if ($('.dropdown').find('.dropdown-menu').is(":hidden")){
$('.dropdown-toggle').dropdown('toggle');
}
});
Bootstrap 3の場合、ドロップダウンタグに「open」クラスを追加するだけです。削除するとドロップダウンが閉じます。
$('.dropdown').addClass('open'); // Opens the dropdown
$('.dropdown').removeClass('open'); // Closes it
これは他のバージョンでも動作する可能性がありますが、わかりません。
Bootstrapのドロップダウンプラグインは、「click.bs.dropdown」イベントがメニューを表示するまで待機するため、この場合:
$('#sidebar_filter_areas').trigger('click.bs.dropdown');
動作するはずです。これにより、同じ要素で他の「クリック」イベントが発生してもトリガーされません。
dropdown('toggle')
は、ボタンタグを使用するときに最適です。
$("#mybutton").dropdown('toggle')
<button class="dropdown-toggle ban" role="button" data-toggle="dropdown" data-target="#" id="mybutton">...</button>
クリックイベントが親要素にバブリングするのを停止する必要があります
$('#sidebar_filter_city li').click(function(e){
$('#sidebar_filter_areas').dropdown('toggle');
e.stopPropagation();
});
return false;
を使用して同じことを行うこともできますが、これによりクリック時のデフォルトも防止されます。
それらのどれもがトリックを行っていない場合は、次のようなことができます:
$('.dropdown').addClass('open'); // substitute with your own selector
$('.dropdown-toggle').attr('aria-expanded', true).focus(); // substitute with your own selector
上記は機能しますが、少しハックがあるので使用しないことをお勧めします。
bootstrap docs によると、単にこれを使用できます:
$('.dropdown-toggle').dropdown();
これは私のために動作します。
$('.dropdown-toggle').click(function (ev) {
ev.stopPropagation();
$(this).parent().toggleClass('open');
});
マークアップ:
<div class="dropdown pull-right">
<button class="btn btn-default dropdown-toggle task-actions" type="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<img src="{{ asset('img/site/icons/menu.svg') }}" alt="Menu">
</button>
<ul id="dropdown-overview" class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">Separated link</a></li>
</ul>
</div>
データ切り替え要素で.click()
を使用しますが、e.stopPropagation()
を忘れないでください
これらの簡単な行で何時間もかかりましたが、助けになることを願っています:)
これを試してください:$( '#sidebar_filter_areas')。click();
Bootstrap 4.xでは、次のコンポーネントを有効にする必要があります。
クラスとブール値の切り替えをトリガーするクリックイベントリスナーをこれらのクラスに追加すると、次のように純粋なjavascriptでドロップダウンが機能します。
let status = false
const nav = document.getElementsByClassName('nav-item dropdown')[0]
nav.addEventListener('click', toggleDropdown)
function toggleDropdown () {
if (status) {
nav.classList.add('show')
document.getElementsByClassName('nav-link dropdown-toggle')[0].setAttribute('aria-expanded', ' + status + ')
document.getElementsByClassName('dropdown-menu').classList.add('show')
} else {
nav.classList.remove('show')
document.getElementsByClassName('nav-link dropdown-toggle')[0].setAttribute('aria-expanded', ' + status + ')
document.getElementsByClassName('dropdown-menu').classList.remove('show')
}
return status = !status
}
私が使用するのが好きなものは、ユーザーが期待する動作がもう少しあります:
if(!$('#myDropdown').hasClass('show')){
$('#myDropdown').dropdown('toggle');
}
既に開いている場合は、何もしないでください。閉じている場合は、開く必要があります。
開いたドロップダウンメニューを調べると、ドロップダウンメニューの表示を変更するセレクターが表示されます。 bootstrap v3.0.0のCSSセレクターは次のとおりです。
.open > .dropdown-menu {
display: block;
}
したがって、.dropdown-menuクラスを使用して、要素の親ノードにオープンクラスを追加する必要があります。他のバージョンでは、変更された場合、おそらく正しいセレクターが同じ方法で見つかります。
ほとんどの場合、手動のアクションとして機能します:
$('#sidebar_filter_city li').click(function(){
$('#sidebar_filter_areas').click();
});
次のようなネイティブJavaScriptを使用して同じことを実現できます。
document.getElementById( 'XYZ')。click( 'open');
すべてのブラウザで動作します。
Angular 6を使用したBootstrap 4の場合、これを使用しました。
<div class="dropdown-menu" id='logoutDropDownMenu' x-placement="bottom-start" style="position: absolute; transform: translate3d(0px, 40px, 0px); top: 0px; left: 0px; will-change: transform;">
私のコンポーネントTSファイルにはこの機能があります
import { DOCUMENT } from '@angular/common';
import { Inject } from '@angular/core';
export class HomeComponent implements OnInit {
private toggleLogout: boolean;
constructor(@Inject(DOCUMENT) private document: any){}
toggleButton() {
if (this.toggleLogout) {
this.document.getElementById('logoutDropDownMenu').classList.add('show');
} else {
this.document.getElementById('logoutDropDownMenu').classList.remove('show');
}
this.toggleLogout = !this.toggleLogout;
}