Div'我们互相点击
Div's clicking through each other?
我有一个包含的div,它本身就是一个按钮。。。
不过,当点击时,我可以将其设置为展开并显示更多信息,同时显示右上角的关闭按钮。。。
现在,当我点击关闭按钮时,关闭函数会执行,但div的onclick也会打开,所以最终结果是,嗯。。。什么都没发生。。。
哈哈。。。
小提琴的例子也不起作用,我快智穷了。。。
http://jsfiddle.net/VeyeY/5/
您可以从onclick返回false来关闭div。这将确保点击事件不会传播。
另一种解决方案是在事件本身上调用preventDefault()
和stopPropagation()
。这也将确保事件不会继续
编辑:
在所有发生的事件(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
,这样用户就不会同时单击这两个按钮(或者从#outer
的顶部边缘偏移一点)(更新:被拒绝,CSS解决方案) -
或者,为每个
div
激发不同的函数,如innerToggle()
和outerToggle()
。这样,你甚至可以从另一个呼叫一个(更新:此处有问题,导致解决方案2a。)2a。另一种方法是只为
#outer
触发事件?如果单击#inner
,事件将弹出,#outer
将触发切换,如图所示 -
或者,根据需要禁用其中一个或另一个的单击事件(更新:请参阅@DanneMarne的解决方案。)
-
或者,在每个对象上设置一个自定义属性,例如
$('outer').toggled = false
,它将记录每个对象的当前状态(更新:没关系,没有多大帮助)
更新:所以,经过一点测试,我会选择2a
您可以在显示后禁用div单击功能。当按下关闭按钮时,您可以重新启用点击功能。
- 添加文字和评论功能更新Div
- 点击后隐藏潜水?(但如果Div是一面旗帜呢?)
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 使用JavaScript动态插入DIV的成本有多高
- DIV并排,位置不正确
- Div根据<选择>菜单
- 为什么不'我们在javascript中使用函数参数的数据类型
- Href:当前DIV中的目标ID
- Onchange没有'不要显示或隐藏Div
- 绝对定位不适用于Javascript DIV
- 在Rails中更新Div,而不更改更新请求后的视图
- how to convert html <div> to pdf
- 我们如何使用css或JavaScript在i/j上更改句点(点)的颜色
- 如何在不影响其他元素的情况下扩展DIV
- 我们如何在不更改url的情况下使用锚点点击从一个页面重定向到另一个页面
- 当我们滚动&Div来到Windows中间位置
- 当移动页面位于顶部时,Div垂直居中,但当我们向下滚动页面时,会发生错误
- Div'我们互相点击
- 我们可以检测一个链接是否在一个有jQuery.click()的DIV中被点击了吗
- 当& lt; li>改变我们的Div类