I've searched everywhere and I couldn't find an answer to this question.
I've built a menu with couple of divs inside divs:
<nav id="menu">
<span>Open Menu</span>
<div class="dropdownContain">
<div class="dropOut">
...
...
<div id="logout_wrap">
<a id="logout">
And a script using JQuery so that menu appears (toggle) when "#menu" is clicked and disappear when body is clicked. for this functionality I had to use stopPropagation() method to stop #dropDownContain from running "body" 's hide() function
$(document).ready(function () {
$('#menu').click(function (e) {
e.stopPropagation();
$('.dropdownContain').toggle();
});
$(document).click(function (e) {
$('.dropdownContain').hide();
});
$('.dropdownContain').click(function (e) {
e.stopPropagation();
});
also I have made a click event for "#logout" which is inside "#dropdownContain" (which is the main body of menu) to run someThing() function.
jQuery('body').on('click', '#logout', function () {
alert("THIS DOES NOT WORK");
});
The problem is that "#logout" 's assigned function will not fire because of the stopPropagation() method that is called in it's parent (or so I think).
here's the link to html + js for this code, just so you could see it in use: JSFiddle
so is there a solution to fix this while keeping the menu popup working as explained?
Stop using stopPropagation and manually check if the click was inside
#menu
or not :Unless you have a reason for using event delegation, you can just bind the click directly to the logout link.
The delegated version you were using only fires when the event bubbles all the way back to the
body
element (which it won't, since you're stopping the propagation.)