0
CSSとプレーンJavaScriptを含むドロップダウンメニューを作成しました。誰かが入力要素をチェックしたとき、ドロップダウンメニューは私が望んでいるものを正確に表示します。私が今遭遇した闘いだけがJavaScriptの部分です。チェックボックスは、誰かがドロップダウンメニュー自体とラベルをクリックしていない場合にのみオンにする必要があります(入力/ラベルが純粋なCSSでうまく機能するため)。それ以外のものはこの機能を引き起こします。単純なJavaScriptでのみ!JavaScriptを外してクリックするとチェックが外されます
function validate(e){
\t var e = event || window.event, // make this works in different browsers
\t \t checkNavbar = document.getElementById("navbar-dropdown-toggle"), // input
\t \t checkboxNavbar = document.getElementById("checkboxNavbar"), // label
\t \t storeDropdown = document.getElementById("storeDropdown"); // unordered list dropdown-menu
\t \t
\t if (checkNavbar.checked == true && e.target != checkboxNavbar) { //check if checbox is already checked
\t \t console.log("checkbox is checked");
\t \t if(e.target != storeDropdown) {
\t \t \t console.log("you do not click on ul and label");
\t \t \t if(checkNavbar.checked == false) { // if it is clicked outside
\t \t \t checkNavbar.checked = false; // if that is true we should uncheck the checkbox
\t \t \t return false;
\t \t \t }
\t \t }
\t } \t
};
document.addEventListener("click", validate);
.dropdown-label-navbar {
\t height: 55px;
\t width: 100%;
\t display: block;
\t position: absolute;
}
.navbar-dropdown {
opacity: 0;
position: absolute;
margin-left: -999px;
}
\t .dropdown-menu {
\t \t width: 100%;
\t \t background: white;
\t \t position: absolute;
\t \t left: 0;
\t \t right: 0;
\t \t max-height: 0;
\t \t overflow: hidden;
\t \t box-sizing: border-box;
\t }
\t .navbar-dropdown:checked ~ .dropdown-menu {
\t \t display: block;
\t \t transition: max-height 1s;
\t \t max-height: 300px;
\t \t opacity: 1.0;
\t \t border-top: 1px solid #828282;
\t \t border-bottom: 1px solid #828282;
\t }
\t .dropdown-label-navbar {
\t \t height: 25px;
\t \t width: 150px;
\t \t display: block;
\t \t position: absolute;
border: 1px solid red;
\t }
<input id="navbar-dropdown-toggle" type="checkbox" class="navbar-dropdown"/>
<label class="dropdown-label-navbar" id="checkboxNavbar" for="navbar-dropdown-toggle"></label>
<a href="#99" class="main-links">Store</a>
<ul class="dropdown-menu" id="storeDropdown">
<div class="entire-block">
<div class="dropdown-image-block">
</div>
<li class="list-of-dropdown">
<div class="dropdown-list"><a href="case-and-protection.html">Cases and Protection</a></div>
<div class="dropdown-list"><a href="power_and_cable.html">Power and Cables</a></div>
<div class="dropdown-list"><a href="audio.html">Audio</a></div>
</li>
</div>
</ul>
参照してください。 upda私の答えに耳を傾ける。 – trincot