【问题标题】:jquery on event for a dynamically generated child of a dynamically generated childjquery on event 为动态生成的孩子的动态生成的孩子
【发布时间】:2017-12-19 22:20:44
【问题描述】:

我有一个动态添加的 div,我希望为已动态添加到另一个标签中的图像设置一个 mouseenter 事件。被添加到的 div 看起来像这样:

<div class="chat_box">

</div>

添加内容后如下所示:

<div class="chat_box">
  <p class="chat">text here <img class="emote" src="emote.png"> more text</p>
</div>

我想为表情类的图像设置一个 mouseenter 事件,但我无法让它工作。

我尝试了以下方法:

$('.chat_box').on('mouseenter', '.chat', function(){
  alert();
});

它可以工作,但如果我尝试使用子选择器

$('.chat_box').on('mouseenter', '.chat > .emote', function(){
  alert();
});

$('.chat_box').on('mouseenter', '.chat > img', function(){
  alert();
});

它不起作用。

【问题讨论】:

  • 检查你的选择器你的选择chat_box但你没有定义你的类试试$('.chat_box')
  • @HakanKose 对不起,这是一个错字。我在我的实际代码中就是这样的。
  • 无法重现:jsfiddle.net/946j9vqh 问题显然出在其他地方。
  • 我在节点上运行它。会不会有影响?

标签: javascript jquery html dynamic mouseenter


【解决方案1】:

这是以前由 .live() 提供的,但该函数已合并到 .on() ...它创建了一个事件观察器。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<div class="chat_box"></div>

<button>Add</button>

<script>
$('button').click(function(){
    $('<div class="chat"><img width=10 height=10 class="emote"></div>').appendTo('.chat_box');
});
$('.chat_box').on('mouseenter', 'img.emote', function(){ alert('test'); });           
</script>

只需定位父对象并让它监视预期的子对象。

【讨论】:

  • 这不起作用。我之前尝试过,我认为它不起作用,因为 on 事件只能影响直接孩子。无论哪种方式,它都无法正常工作
  • 上面发布的内容已经过测试并且对我有用。我再次尝试以确保没有复制/粘贴错误。你的测试环境有什么奇怪的地方吗?
  • 它在 node.js 和 socket.io 上运行,但是会影响图像的实际 jquery 当然是客户端。我不知道,节点会搞砸还是什么? @索拉克
  • 你能只测试我的代码片段,看看它是否满足你的需要吗?如果是这样,我愿意看看你在哪里尝试整合它并让它发挥作用。
  • 好吧,它现在可以工作了。我为父级更改了 css 中的一些东西,我认为这就是它的原因,虽然我不知道为什么,所以我有点期待它再次中断。如果是这样,我现在就让你。谢谢
猜你喜欢
  • 2013-02-01
  • 1970-01-01
  • 2018-09-26
  • 2018-08-30
  • 2013-11-04
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多