【问题标题】:Don't fire mouseenter event on parent不要在父级上触发 mouseenter 事件
【发布时间】:2021-12-01 04:46:39
【问题描述】:

对于包含文本的标签(tdpli),我添加了一个data-id 属性。将鼠标悬停在具有data-id 属性的标签上时,需要显示该按钮。一切正常,除非标签是嵌套的,例如:

<li aria-level="1" data-id="66389178">
  <p data-id="11168609">text</p>
</li>

此示例显示两个按钮,一个用于父级,一个用于子级。我添加了e.stopImmediatePropagation();,但这不适用于td。这是代码本身:

$('[data-id]').mouseenter(function (e) {
  GodObj.btnadd = $('<button class="btn btn-outline-dark btn-note-tag">' +
    '<i class=\'fa fa-commenting\' aria-hidden=\'true\'></i>' + '</button>');

  $(this).append(GodObj.btnadd);
  e.stopImmediatePropagation();
}).mouseleave(function () {
  $(GodObj.btnadd).remove();
});

绘制两个按钮时的示例:

<td aria-level="1" data-id="66389170">
  <p data-id="11168601">...</p>
</td>

内容是用户通过网站上的编辑器添加的,因此标签之间的嵌套级别没有严格的规定。

如何使按钮只渲染一次或为父元素或子元素渲染?

【问题讨论】:

  • 应该触发哪一个:父母还是孩子?
  • 没关系,主要是有人是一个,而不是同时
  • 看看这是否适合你:jsfiddle.net/2anfL9j6
  • @Shikkediel,看起来真的有效!非常感谢您的帮助!这就是最后发生的事情。在答案中添加您自己的选项,以便我为它投票jsfiddle.net/wolf_den/2dn1kare

标签: jquery nested event-listener mouseenter


【解决方案1】:

你需要以e.stopImmediatePropagation();开头:

            $('[data-id]').mouseenter(function (e) {
                e.stopImmediatePropagation();
                GodObj.btnadd = $('<button class="btn btn-outline-dark btn-note-tag">' +
                    '<i class=\'fa fa-commenting\' aria-hidden=\'true\'></i>' +
                    '</button>');
                $(this).append(GodObj.btnadd);
            }).mouseleave(function () {
                $(GodObj.btnadd).remove();
            });

【讨论】:

  • 唉,这对 td 不起作用。据我了解,关键是 td 及其子 p 具有不同的大小
  • 添加了问题截图的链接,以便更清楚地了解问题的含义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多