我到处搜索,我找不到这个问题的答案。
我在div中构建了一个带有几个div的菜单:
Open Menu ... ... 还有一个使用JQuery的脚本,以便在单击“#menu”时显示(切换)菜单,并在单击主体时消失。 对于这个function,我不得不使用stopPropagation()方法来阻止#dropDownContain运行“body”的hide()函数 $(document).ready(function () { $('#menu').click(function (e) { e.stopPropagation(); $('.dropdownContain').toggle(); }); $(document).click(function (e) { $('.dropdownContain').hide(); }); $('.dropdownContain').click(function (e) { e.stopPropagation(); }); 我也为“#logout”做了一个点击事件,它在“#dropdownContain”(这是菜单的主体)里面运行someThing()函数。 jQuery('body').on('click', '#logout', function () { alert("THIS DOES NOT WORK"); }); 问题是“#logout”的指定函数不会触发,因为在它的父节点中调用了stopPropagation()方法(或者我认为)。 这里是这段代码的html + js链接,只是为了让你看到它在使用中: JSFiddle 那么是否有一个解决方案来解决这个问题,同时保持菜单弹出按照说明工作? 停止使用stopPropagation并手动检查点击是否在#menu内: $('#menu').on('click', function() { $('.dropdownContain').toggle(); }); $(document).on('click', function(e) { if (! $(e.target).is('#menu') || $(e.target).closest('#menu').length ) $('.dropdownContain').hide(); }); 除非您有使用事件委派的原因,否则您可以直接将点击绑定到注销链接。 jQuery('#logout').on('click', function () { alert("this works"); }); 您使用的委托版本仅在事件一直回到body元素时才触发(由于您正在停止传播,因此它不会触发)。 克隆元素后Jquery UI Datepicker不起作用 在while循环中延迟 使用JQuery创建图像的实时预览(在上传之前)使用jQuery NOT选择器来排除具有特定子元素的元素。使用Webpack进行简单的站点Ajax调用无法在onbeforeunload事件中工作jqGrid链接显示文本ASP.NET jQuery双列表框编辑和保存我该如何避免这个jQuery文件冲突?Javascript:10秒后调用函数,然后每1分钟调用一次validation插件在更新面板中不起作用 Go! Interesting Posts 如何从JQuery Ajax请求中获取“数据”在默认PDF查看器中禁用/隐藏iframe中的下载按钮JSFiddle包装在onLoad中?如果我们给出更多的16位数字,如何获得正确的整数值?为什么$ .click()必须包含在$(document).ready()中?用户输入RegExp不区分大小写jquery动画位置百分比MySQL和PHP加载超过1000个项目使浏览器冻结带有var args的Typescript 0.9.5编译失败如何检查使用jquery检查的多个复选框?
还有一个使用JQuery的脚本,以便在单击“#menu”时显示(切换)菜单,并在单击主体时消失。 对于这个function,我不得不使用stopPropagation()方法来阻止#dropDownContain运行“body”的hide()函数
$(document).ready(function () { $('#menu').click(function (e) { e.stopPropagation(); $('.dropdownContain').toggle(); }); $(document).click(function (e) { $('.dropdownContain').hide(); }); $('.dropdownContain').click(function (e) { e.stopPropagation(); });
我也为“#logout”做了一个点击事件,它在“#dropdownContain”(这是菜单的主体)里面运行someThing()函数。
jQuery('body').on('click', '#logout', function () { alert("THIS DOES NOT WORK"); });
问题是“#logout”的指定函数不会触发,因为在它的父节点中调用了stopPropagation()方法(或者我认为)。
这里是这段代码的html + js链接,只是为了让你看到它在使用中: JSFiddle
那么是否有一个解决方案来解决这个问题,同时保持菜单弹出按照说明工作?
停止使用stopPropagation并手动检查点击是否在#menu内:
#menu
$('#menu').on('click', function() { $('.dropdownContain').toggle(); }); $(document).on('click', function(e) { if (! $(e.target).is('#menu') || $(e.target).closest('#menu').length ) $('.dropdownContain').hide(); });
除非您有使用事件委派的原因,否则您可以直接将点击绑定到注销链接。
jQuery('#logout').on('click', function () { alert("this works"); });
您使用的委托版本仅在事件一直回到body元素时才触发(由于您正在停止传播,因此它不会触发)。
body