【发布时间】:2018-10-08 14:30:09
【问题描述】:
我在 div 元素中有一个下拉菜单。当点击页面上的任何其他主链接(不包括下拉菜单本身的链接)时,调用 javascript 函数 HideDropdown() 隐藏菜单:
<script>
function HideDropdown() {
$("#dropdown-content-id2").hide();
$("#dropdown-content-id").hide();}
</script>
当我单击主体上除下拉菜单本身之外的任何位置时,我还想调用 HideDropdown() 来隐藏菜单(如果它已打开)。
在正文标签中我插入了这个:
<body onload="ShowPage(1)" onclick="HideDropdown()">
当我单击屏幕上的任意位置时,它成功隐藏了下拉菜单。我想排除对显示下拉菜单的链接以及下拉菜单本身的任何位置的点击,所以我修改了正文标签:
<body onload="ShowPage(1)" onclick="HideDropdownCall(e)">
并创建了一个新的 javascript 函数以从正文 onclick 调用:
<script>
function HideDropdownCall(e) {
if(e.target.id != "dropdown-content-id" ){
HideDropdown();
}
</script>
但那没有用,所以我修改了它:
<script>
function HideDropdownCall(e) {
if(e.target.id != "dropdown-content-id" ){
$("#dropdown-content-id2").hide();
$("#dropdown-content-id").hide();}
}
</script>
但这仍然行不通。
所以我的问题是,我怎样才能从正文点击调用 HideDropdown() 函数,经过过滤,以便不计算下拉菜单本身的点击?
非常感谢您的帮助。
编辑:
经过一些工作,我将问题简化为:我可以像这样从 body 标记调用 HideDropdown() 函数:
<body onload="ShowAjax(1)" onclick="HideDropdown()">
这行得通。但是,当我将其更改为具有限定条件的相同函数时(如果单击事件由下拉菜单触发,则不是),开发控制台会显示“TypeError:e 未定义”,因此它与条件语句有关:
<body onload="ShowAjax(1)" onclick="HideDropdown_B()">
<script>
function HideDropdown_B(e) {
if(e.target.id != "dropdown-content-id" ){
$("#dropdown-content-id2").hide();
$("#dropdown-content-id").hide();}
}
</script>
所以我的问题现在归结为找出为什么上面的新函数在没有 if 语句的同一个程序工作时返回类型错误。
【问题讨论】:
-
如果您提供了一个包含 html 和 JS 代码的最小示例,这样我们就可以使用它并查看您在谈论什么行为,这将会很有帮助
-
点击正文关闭下拉列表,点击下拉调用 e.stopPropagation() 以阻止点击事件传播到正文 - 我在这里写了一个更好的答案 stackoverflow.com/questions/17965839/…
-
我们必须查看您的标记。您的事件委托架构应该可以工作。
标签: javascript jquery