我試圖重新創建jQuery的本機event
處理程序,.click("body", "element, element", function(...));
。如果用戶點擊除了這兩個元素之外的任何地方,它就會執行某些操作。javascript - 除了某些元素之外的任何東西; e.target不工作...有時
我已經成功完成此操作,但是,有時腳本將無法工作。過了一段時間,如果用戶點擊body
,則實際下拉按鈕觸發,它不會爲下拉菜單切換class
。我不確定爲什麼發生這種情況,因爲它是現在,然後每一個工作...
這是我的JavaScript:
var uButton = document.getElementById("user_content"), // the trigger
uDropdown = document.getElementById("user__dropdown-menu"); // the menu
document.onclick = function(e){
if(e.target == uButton){ // if button has been clicked
toggleClass(uDropdown, "active"); // (custom function) toggle the class "active"
} else if(e.target != uButton && e.target != uDropdown){ // if anything BUT the dropdown and button are clicked
if(hasClass(uDropdown, "active")){ // (custom function) if the dropdown is active
uDropdown.className = "user__procedural-outer-dropdown"; // reset the classes to default
}
}
}
和相應的HTML:
<div class="navigation__user-content" id="user_content"> <!-- the button !-->
<span id="nav_username">Sign In</span>
<div class="user__procedural-outer"></div>
</div>
<div class="user__procedural-outer-dropdown" id="user__dropdown-menu"></div> <!-- dropdown !-->
我已經包括了JsFiddle以便您可以嘗試並重新創建我的問題。
非常感謝所有幫助,
謝謝。
添加一個簡單的'的console.log(e.target)',可以看到的是,目標是有時'<跨度ID = 「nav_username」>登錄' – Claies
@Claies我如何確保它在點擊按鈕或內容時有效?我已經嘗試過'uButton = document.querySelector(「#user_content,#user_content *);'但是,它仍然只是有效的 –
我相信問題是嵌套HTML元素的事實,目標應該是最內層的嵌套元素。我相信解決方案將是一個做...while循環與條件'(elem = elem.parentNode)'。 –