メニューに追加のタブを動的に作成しています(この新しいタブを呼び出そうとします)、新しいタブが表示されたときに表示されたサブメニューを含め、すべてがうまくいっていました。イベントのバブリングに関する記事を見て、他の例を見ましたが、私の問題の解決策を見つけることができませんでした。JavaScriptサブメニューが維持されない
[ウォッチ]の上に移動すると、サブメニューが表示されますが、ウォッチからそのサブメニューに移動しようとすると、サブメニューが消えます。ユーザーがウォッチまたはサブメニューの上を移動するときにサブメニューを保持する必要があり、サブメニューはユーザーがいったん外に出ると消えてしまいます。注意するだけで、自分のソリューションにCSSを使用することはできません。私はコメントして以下に私の現在のコードを添付しました:
//PREPEND AS FIRST CHILD
var prependChild = function(parent, newFirstChild) {
parent.insertBefore(newFirstChild, parent.firstChild)
}
//DECLARING VARS
var navMenu = document.getElementsByClassName('navGlobal-list')[0];
categoryExplorer = document.getElementsByClassName('categoryExplorer')[0];
//CREATING NEW TAB
var exploreTab = document.createElement('li');
exploreTab.className = 'navGlobal-category';
//CREATING NEW SEARCH FORM
var searchHtml = ['<div class="searchProgram searchProgram--categoryExplorer">',
'<div class="searchProgram-container">',
'<input type="search" class="form-control form-control--light form-control--searchProgram" placeholder="Search programs" value="">',
'</div>',
'</div>'].join('');
//CREATING NEW WATCH CATEGORY EXPLORER CONTENT
var watchCategoryExplorerContent = document.createElement('div');
watchCategoryExplorerContent.className = 'categoryExplorer-content target-watch-content';
watchCategoryExplorerContent.innerHTML = searchHtml;
prependChild(categoryExplorer, watchCategoryExplorerContent)
var watchLink = document.createElement('a');
watchLink.setAttribute('href','/watch');
watchLink.innerHTML = 'watch'.toUpperCase();
exploreTab.appendChild(watchLink);
navMenu.appendChild(exploreTab); //ADDED 'WATCH' TO THE NAVIGATION
//CHANGE CLASSES ON HOVER
exploreTab.addEventListener("mouseover", function() {
exploreTab.className = 'navGlobal-category navGlobal-category--open';
categoryExplorer.className = 'categoryExplorer categoryExplorer--open';
watchCategoryExplorerContent.className = 'categoryExplorer-content categoryExplorer-content--open target-watch-content';
}, false);
exploreTab.addEventListener("mouseleave", function() {
exploreTab.className = 'navGlobal-category';
categoryExplorer.className = 'categoryExplorer';
watchCategoryExplorerContent.className = 'categoryExplorer-content target-watch-content';
}, false);
表示を変更してもサブメニューが表示されず、メニューが表示されるのは、categoryExplorer-open、navGlobal-category-open、およびcategoryExplorer-content-openが存在する場合のみです。これを回避する方法は表示を調整しないでしょうか? –
それはそれ自体が奇妙です。そこに '重要な'があるのですか?あなたのクラスをどのように使っているのか本当に分かりません。彼らは私に直感的ではなく、私はそれを理解していない定義を見ていない。 – Halcyon
それは大丈夫です、私は1つのアプローチとしてメニューを置き換え、mouseenter mouseleaveせずに別のアプローチに取り組んでいます。レイアウトはReactから構築され、サブメニューはクラスが別のコンポーネントに存在するかどうかに基づいてのみ表示されていました。 –