jQuery設定で、最初のクリックでデフォルトの伝播を停止し、ユーザーが最初のクリックでサブメニューを表示し、2回目のクリックでリンクを復元するか、ユーザーがクリックした場合に現在表示されているサブメニューを非表示にする最良の方法は何ですか?ページの他の部分では、いくつかのバリエーションでこれを試しましたが、どれもうまくいかないようです:
$('.nav-bar li:has(ul)').on('click', function () {
var CheckForClasssub = $('.nav-bar li ul').hasClass('subshow');
if (CheckForClasssub) {
$('.subshow').hide('slow').removeClass('subshow');
} else {
$('.nav-bar li').on('click', function () {
var thisflyout = $(this).find('.flyout');
$(thisflyout).toggle('slow').addClass('subshow');
});
}
});
これは私の現在のメニュー構造です:
<ul class="nav-bar">
<li>
<a href="http://google.com">google</a>
<a href="#" class="flyout"></a>
<ul>
<li><a href="http://google.com">test</a></li>
<li><a href="http://google.com">test</a></li>
<li><a href="http://google.com">test</a></li>
<li><a href="http://google.com">test</a></li>
<li><a href="http://google.com">test</a></li>
</ul>
</li>
<li><a href="http://google.com">google</a></li>
<li><a href="http://google.com">google</a></li>
<li><a href="http://google.com">google</a></li>
<li><a href="http://google.com">google</a></li>
</ul>
現在クリックするclass="flyout"
とサブメニューが切り替わりますが、リンク全体を使用したいと思います
/ *更新** /
これは、最初のクリックで表示し、2 番目のクリックでリンクをたどると問題なく動作しますが、ページが他の場所でクリックされた場合は非表示になりません...
$('.nav-bar li:has(ul)').on('click', function (e) {
var CheckForClasssub = $('.nav-bar li ul').hasClass('subshow');
if (CheckForClasssub) {
$('.subshow').hide('slow').removeClass('subshow');
} else {
var thisflyout = $(this).find('.flyout');
e.preventDefault();
$(thisflyout).show('slow').addClass('subshow');
}
});
/ *更新** / 要件を明確にするには:
ユーザーは、A リンクを親として、サブメニューを使用してメニュー項目をクリックします。
ul > li + a > ul > li
これが最初のクリックの場合は、サブメニューを表示します。
2 回目のクリックで、関連するリンクに直接アクセスできます。
ユーザーがサブメニューを表示しているメニュー項目 1 を 1 回クリックした後、サブメニューのある別の親メニュー項目をクリックすることにした場合、サブメニュー 1 を非表示にしてサブメニュー 2 を表示します。
ユーザーがメニュー項目 1 をクリックし、サブメニューのあるメニュー項目ではないページ上の他の場所をクリックすることを決定した場合、開いているサブメニューを非表示にします....
var submenucheck = $('.nav-bar li ul');
var submenucheckli = $('.nav-bar li a');
showHide = false;
function checkforsubsopen() {
// body...
$.each(submenucheck, function(el) {
/* iterate through array or object */
if($(this).hasClass('subshow')){
showHide = true;
}
});
return showHide;
}
$('.nav-bar li:has(ul)').on('click', function(e) {
var CheckForClasssub = $('.nav-bar li ul').hasClass('subshow');
if(CheckForClasssub){
}
else{
var thisflyout = $(this).find('.flyout');
e.preventDefault();
$(thisflyout).show('slow').addClass('subshow');
}
});
$(document).on('click', function(){
checkforsubsopen();
if(showHide){
$('.subshow').hide('slow').removeClass('subshow');
}
console.log(showHide);
});