当前一个兄弟有 z-index 时,单击侦听器不会触发

用户2792352

我有一个表,其中包含一个粘性第一列,然后是一些包含input字段的附加列。每个字段都有一种浮动工具栏,当输入元素具有焦点时应该出现该工具栏。它看起来大致是这样的:

let elements = document.getElementsByClassName('toolbar');
for (var i = 0; i < elements.length; i++) {
  elements[i].addEventListener('click', function() {
    alert('clicked');
  });
}
td {
  position: relative;
}

.sticky {
  position: sticky;
  left: 0;
  background-color: white;
  z-index: 1;
  white-space: nowrap
}

.toolbar {
  position: absolute;
  top: 0;
  left: -20px;
  width: 20px;
  height: 20px;
  opacity: 0;
  background-color: red;
}

input:focus+.toolbar {
  opacity: 1;
  z-index: 2;
  cursor: pointer;
}
<table>
  <tr>
    <td class="sticky">Lorem Ipsum</td>
    <td>
      <input>
      <div class="toolbar"></div>
    </td>
    <td>
      <input>
      <div class="toolbar"></div>
    </td>
    <td>
      <input>
      <div class="toolbar"></div>
    </td>
  </tr>
</table>

(我不能 100% 确定我是否将它直接插入到此片段功能中,如果它不起作用,只需将其保存到本地文件并在那里运行)

如您所见,浮动工具栏元素的显示/隐藏按预期工作。当字段具有焦点时,它会显示在预期位置的所有列。现在这是我不明白的事情:工具栏的点击监听器适用于所有列,除了第一个(即粘性列旁边的那个)。当我单击那个时,工具栏就消失了(因为输入失去了焦点),但是单击侦听器没有运行。

当我z-index从第一列中删除时,问题就消失了,但我不能,因为它需要有粘性才能正常工作。另外,如果这只是一个 z-index 问题,工具栏不应该在 sticky 下方td吗?

似乎发生的事情是:

  • 点击工具栏触发失去焦点input
  • 失去对input原因.toolbar的关注.sticky
  • 浏览器现在由于某种原因决定您单击的元素实际上不可单击并且不运行事件处理程序

我已经在 FF 和 Chrome 中复制了这个,但我不明白这是某种浏览器错误,还是我对事件模型的理解不够好。有没有人有一些见解或相关文档的链接?

小猪92

将 z-index: 2 添加到 .toolbar ,它将被修复。

目前其他点击有效,因为其他列没有 z-index。当您将 z-index: 1 添加到列时,结果是该列显示在工具栏上。现在,由于您无法删除该 z-index,因此有意义的是为您希望在列顶部显示的内容(在本例中为工具栏)提供增加的 z-index。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我添加侦听器时,ChildEventListener的onAddChild将为所有现有节点触发

是否有一个“先前的兄弟”选择器?

将视图放置/重叠(z-index)android中另一个视图之上

Z-index不适用于将父DIV与其中的一个重叠

当有子进程时,.NET TcpListener Stop方法不会停止侦听器

使用z-index将div置于另一个div之上

z-index值较高的元素不会覆盖另一个

当两个元素处于固定位置时,z-index失败

JavaScript在点击时设置z-index

HTML,CSS如何单击带有href的div z-index -1

JavaScript-不会触发具有window.matchMedia的事件侦听器

更改悬停时另一个元素的z-index

单击带有对话框覆盖图(PrimeNG)时如何设置z-index?

为什么React Native Navigation侦听器在第一次尝试时触发?

在另一个事件侦听器的回调内部进行设置时,事件侦听器回调将立即触发。ReactJS

CSS Calc根据当前的z-index值设置新的z-index值

添加一个在用户更改选项卡时将触发的侦听器

将动画div放置在具有z-index的另一个div下

当父视图具有触摸侦听器时处理单击事件

检测按钮单击z-index -1

当父元素上有动画时,Z-index被否决

css ~ 选择器不会将样式应用于所有目标元素(z-index 到下一个/上一个标签)

OnClick 侦听器仅在第一次单击时更新回收器视图

有没有办法从多个标记中设置一个地图标记的 z-index?

使用 z-index 时如何使链接可点击而不将所有其他元素的 z-index 变为负数?

Javascript 单击事件侦听器仅触发一次

z-index 问题 - div 没有覆盖另一个

自定义视图中的单击侦听器触发所有视图

停止侦听器在同一单击 EventListener 内触发而不将其删除