问题描述
|
我有一个包含div,它本身就充当一个按钮...
当单击时,我将其设置为展开并显示更多信息,同时在右上角显示关闭按钮...
现在,当我单击关闭按钮时,将执行关闭功能,而且还会打开div的onclick,因此最终结果是……什么都没有发生……
大声笑...
小提琴的例子也不起作用,而且我快要崩溃了。
http://jsfiddle.net/VeyeY/5/
解决方法
您可以从onclick返回false来关闭div。这样可以确保click事件不会传播。
另一种解决方案是在事件本身上调用“ 0”和“ 1”。这也将确保事件不会继续进行。
编辑:
在所有发生的事件(onclick,onchange,onmouseover等)中,总是存在一个事件变量,您可以忽略该事件变量,或者从中提取信息。在您的示例中,我认为使用事件变量的最简单方法是执行以下操作:
<div id=\"inner\" onclick=\"toggle(false); event.preventDefault(); event.stopPropagation();\">
现在看起来有点难看,您真的不想在html标记中处理此问题,因此另一种选择是将事件变量传递给函数,如下所示:
<div id=\"inner\" onclick=\"toggle(event,false)\">
然后在javascript中:
function toggle(event,x){
// Do your thing
event.preventDefault();
event.stopPropagation();
}
事件变量可以做很多事情。例如,您可以像下面那样检查引发事件的节点,而不是将true或false传递给函数:
if(event.originalTarget.id == \"inner\"){
// Inner was clicked
}else if(event.originalTarget.id == \"outer\"){
// Outer was clicked
}
, 更新
您可以:
在#inner
上放置一个margin-top
,这样用户就不会同时单击它们(或从ѭ8edge的上边缘偏移某种距离)。 (更新:拒绝,CSS解决方案)
或者,对每个ѭ9分别触发不同的功能,例如ѭ10和ѭ11。这样,您甚至可以从另一个呼叫一个。 (更新:在这里摆弄,导致解决方案2a。)
2a。另一种方法是只为ѭ8触发事件?如果单击#inner
,事件将冒泡,而ѭ8fire将触发切换,如下所示。
或者,根据需要禁用一个或另一个的单击事件。 (更新:请参阅@DanneMarne的解决方案。)
或者,在每个对象上设置一个自定义属性,例如ѭ15,它将记录每个对象的当前状态。 (更新:没关系,不是很有帮助)。
更新:因此,经过一些测试,我将使用2a。
, 显示后可以禁用DIV单击功能。您可以在按下关闭按钮时重新启用该单击功能。