javascript - 单击事件和 css 属性未附加到 div,可能是因为 div 是 "moSTLy padding"

标签 javascript jquery html css

我正在尝试将点击事件附加到几个 div。其中一个没有高度或宽度,只有边框。也许它只是浏览器,但点击被触发非常不可靠。甚至 css 参数 .class:hover{} 也没有真正起作用。

$("body").on("click", "._tlh_dropdown, ._tlh_dropdown *", function (event) {

在单击 ._tlh_dropdown 包含的 div 时不起作用。 div ._tlh_dropdown_close_button 在单击时不会删除它的父 div,在悬停时也不会变成更深的灰色阴影。我在这里做错了什么?我认为这与未应用于“只是填充”的 div 区域的单击事件有关。是这样吗?我该如何克服这个问题?

http://jsfiddle.net/UrNUM/7/

最佳答案

发生这种情况是因为作为 div 元素的下划线元素与相关元素重叠。如您所知,div 是 block 级元素。

一种解决方法是将 2 个 div 设置为 inline-block

._tlh_dropdown_input_container, ._tlh_dropdown{
    display: inline-block;
}

Check Fiddle for hover

如果你希望 div 是 block 级的,那么你也可以使用 z-index

._tlh_dropdown_close_button{
     z-index: 1;   
}

这将确保关闭的 div 始终位于底层容器的顶部

更新

页面上的每个点击事件都会触发 2 个事件。

所以当你点击图片时,由于这种情况,内容不会显示

if ($targ.hasClass('_tlh_dropdown') 
      || $targ.closest('._tlh_dropdown_content').length)

return; 

发生这种情况是因为当您单击箭头图像时 e.target 将是箭头而不是 tlh_dropdown ..所以它在这种情况下失败并移动到删除内容的下一条语句。

改变它

if ($targ.hasClass('_tlh_dropdown') 
       || $targ.closest('._tlh_dropdown').length  
       || $targ.closest('._tlh_dropdown_content').length) 
 return; 

它应该工作..

Check Fiddle

我还觉得可以用更少的代码来完成同样的事情。您始终可以构建已构建的 HTML,然后根据条件隐藏或显示。

关于javascript - 单击事件和 css 属性未附加到 div,可能是因为 div 是 "moSTLy padding",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17688877/

相关文章:

javascript - 为什么对象原型(prototype)方法在 oop 中没有调用者,这与过程式编程不同

javascript - 未捕获的类型错误 : object is not a function (calling onchange function)

javascript - jquery如何判断我点击的td是第一行还是最后一行,以及行索引和列索引?

html - 以图像为背景和悬停效果的 Google map 自定义多边形

javascript - 悬停时如何增加多行文本的下划线宽度

javascript - 如何从 OpenLayers 中获取 map 的当前视口(viewport)作为几何体、边界框或 wkt?

javascript - 如何将外部 HTML 文件导入 TypeScript 类

javascript - 在使用 jQuery 的每个 ajax 请求之前,我想做某事

javascript - 搜索字段问题 - 输入时不提交,更改 url 但不加载 url

css - Bootstrap Column,隐藏而不是隐藏