Javascript 分区';谁在互相点击?
我有一个包含的div,它本身就像一个按钮 当点击时,我已经设置好展开并显示更多信息,同时在右上角显示一个关闭按钮 现在,当我单击close按钮时,close函数将执行,但div的onclick也将打开,因此最终结果是,嗯。。。什么都没发生 哈哈 提琴的例子也不起作用,我快疯了Javascript 分区';谁在互相点击?,javascript,Javascript,我有一个包含的div,它本身就像一个按钮 当点击时,我已经设置好展开并显示更多信息,同时在右上角显示一个关闭按钮 现在,当我单击close按钮时,close函数将执行,但div的onclick也将打开,因此最终结果是,嗯。。。什么都没发生 哈哈 提琴的例子也不起作用,我快疯了 您可以在显示后禁用DIVs click功能。当按下“关闭”按钮时,您可以重新启用该单击功能。已更新 你可以: 将页边距顶部放在#内部上,这样用户就不会同时单击两个页边距(或者从#外部的顶部边缘偏移某种距离)。(更新:已拒绝
您可以在显示后禁用DIVs click功能。当按下“关闭”按钮时,您可以重新启用该单击功能。已更新 你可以:
页边距顶部
放在#内部
上,这样用户就不会同时单击两个页边距(或者从#外部
的顶部边缘偏移某种距离)。(更新:已拒绝,CSS解决方案)div
启动不同的函数,如innertobggle()
和outertogle()
。这样你甚至可以从另一个呼叫一个。(更新:胡闹,导致解决方案2a。)
2a。另一种方法是只为#outer
触发事件?如果单击了#内部
,事件将弹出,并且#外部
将触发一个切换,如图所示$('outer')。toggled=false
,它将记录每个对象的当前状态。(更新:没关系,没什么帮助)更新:所以,经过一点测试后,我选择2a。您可以从onclick返回false来关闭div。这将确保click事件不会传播 另一种解决方案是对事件本身调用
preventDefault()
和stopPropagation()
。这也将确保活动不会继续进行
编辑:
在所有发生的事件(onclick、onchange、onmouseover等)中,总是有一个事件变量,您可以忽略它,也可以从中提取信息。在您的示例中,我认为使用事件变量最简单的方法是执行以下操作:
<div id="inner" onclick="toggle(false); event.preventDefault(); event.stopPropagation();">
<div id="inner" onclick="toggle(event, false)">
if(event.originalTarget.id == "inner"){
// Inner was clicked
}else if(event.originalTarget.id == "outer"){
// Outer was clicked
}
使用事件变量可以做很多事情。例如,您可以像下面这样检查引发事件的节点,而不是将true或false传递给函数:
<div id="inner" onclick="toggle(false); event.preventDefault(); event.stopPropagation();">
<div id="inner" onclick="toggle(event, false)">
if(event.originalTarget.id == "inner"){
// Inner was clicked
}else if(event.originalTarget.id == "outer"){
// Outer was clicked
}
你看,我所做的是,当点击外部div时,我经历了切换过程,删除了外部div的onclick属性。。。所以只有一个事件是从内部分区发射的,是吗?(outer.removeAttribute('onclick')),我显然必须在单击内部div后再次添加该属性,但发生的情况是,一旦单击内部div,外部div就会返回其单击,这也会触发,并且我最终会在我开始的位置处结束。。。令人沮丧的…:-嗯。。。这听起来很有趣。。。我是JS新手,所以这两个是新的。。。你能解释一下(或给我指一个解释)你在这里的建议吗?那是描述性的。。。谢谢你,伙计…:-)首先,在我可能的行动过程中,用选择回答一个问题。。。至于我的问题,第一个选择是不可行的(css让我束手无策,我也不想再让她发胖了),我尝试了不同的功能,结果还是一样的。。。是否通过删除“onclick”属性来禁用单击?我还是JS新手,所以jQuery对我来说太难了…:-pI在您的示例中探讨了这些想法,有些好,有些坏。看起来您不需要为
#内部
再次单击,因为关闭按钮位于#外部
中。我还确认Javascript在JSFIDLE上的行为异常,这可能是一个我懒得修复的简单设置但是你看,假设有一个框,当你点击这个框时,它会展开并显示更多信息,并且在右上角显示一个小的关闭按钮。。。现在,单击此关闭按钮(无论出于何种原因,我选择使用Div,称之为挑战),也将触发父Div的onclick操作,因此不会关闭框…:-(如果我仅依赖父项的切换,则单击任意位置将导致框关闭。。。