不要在父级上触发鼠标输入事件

Don't fire mouseenter event on parent

提问人:Denis S 提问时间:10/12/2021 最后编辑:ShikkedielDenis S 更新时间:10/14/2021 访问量:68

问:

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

内容由用户通过网站上的编辑器添加,因此对于标签相互嵌套的级别没有严格的规则。

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

jquery 嵌套 事件侦听器 mouseenter

评论

0赞 Aidan Hakimian 10/12/2021
应该触发哪一个:父项还是子项?
0赞 Denis S 10/13/2021
没关系,最主要的是某人是一个,而不是同时兼而有之
0赞 Shikkediel 10/13/2021
看看这是否适合您: jsfiddle.net/2anfL9j6
1赞 Denis S 10/13/2021
@Shikkediel,看起来真的有效!非常感谢您的帮助!这是最后发生的事情。在答案中添加您自己的选项,以便我可以 jsfiddle.net/wolf_den/2dn1kare 投票

答:

0赞 Aidan Hakimian 10/12/2021 #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();
            });

评论

0赞 Denis S 10/13/2021
唉,这不适用于TD。据我了解,关键是 td 和它的子 p 具有不同的大小
0赞 Denis S 10/13/2021
添加了一个问题截图的链接,以使其更清楚地了解它的内容