为什么我对on()(或live())的调用不能处理使用append()添加的元素?
Why doesn't my call to on() (or live()) work with elements added using append()?
我有一个问题,防止使用on()
点击超链接。我研究了Stackoverflow,但还没有找到答案。
代码如下:
$(document).ready(function() {
$(document).on('click', '.spoiler > a', function(e)
{
e.preventDefault();
return false;
});
});
然后,像这样添加一个链接:
$("#chatContainer").append("<div class='spoiler'><a href='blah'>lorem ipsum</a></div>");
但是当我点击链接时,链接仍然被跟随。我已经确认这是因为click
处理程序根本没有被调用。我也确认了$(document).ready()
函数被调用,并且$('.spoiler > a')
正确地选择了添加后的<a>
元素。
那么,为什么不工作!?是不是on()
应该绑定到匹配其选择器的所有元素,甚至是后来添加的?
[Edit]如果我把代码放在<a>
元素的onclick
中,它可以工作:
$("#chatContainer").append("<div class='spoiler'><a href='blah' onclick='return doNothingWhenClicked();'>lorem ipsum</a></div>");
...
function doNothingWhenClicked()
{
return false;
}
那么为什么在使用on()
!时不起作用呢?
不要!我发现了它——它是在我没有发布的代码中,对不起。
在其他地方,我为.spoiler
div设置了click
处理程序,它删除了.spoiler
类。
$('.spoiler').on('click', function(e)
{
$(this).removeClass('.spoiler');
});
由于父类的click
处理程序在子类之前被调用,当我点击链接时,.spoiler
类被从父类中删除…这同时从子进程中删除了click
绑定!
通常我会删除这个问题,但由于我认为这是一个相当棘手的错误,我将把这个问题/答案留在这里,以防将来它对其他人有所帮助。
同时,我愿意听取关于如何最好地处理这种情况的建议。
相关文章:
- 尝试添加一个选项以使用append进行选择,但没有任何结果
- jQuery动态使用.append()添加输入,但发布表单不是追加数据
- 动态jQuery不在.append()之后发布表单的添加输入
- jQuery:无法定位通过 .append() 添加的元素
- Jquery类选择器无法选择用.append()添加的新类实例
- 如何将.append()创建的元素顺序添加到先前添加的元素中
- D3-append('foreignObject')只添加一个文本和tspan元素
- 为什么可以't我查询一个刚刚通过append()添加的元素
- 如何在 append() 上添加具有唯一 id 的编辑按钮
- 无法在 jquery .append() 方法中的按钮中添加类或 id 以制作有效的按钮
- 为什么我对on()(或live())的调用不能处理使用append()添加的元素?
- 如何强制.prepend()和.append()添加DOM对象,而不是文本
- jQuery:使用.html()或.append()添加目标元素
- 如何使用jQuery .append()添加图像
- jQuery append添加多个项
- 使用jQuery append()添加html元素后的页面源问题
- 通过jquery append添加的元素不会在屏幕上持久存在
- 使用Javascript将.insertAfter或.append添加到元素Id.它's是一个脚本标记,因此它可
- Jquery使用append添加,使用.remove删除
- 使用 jQuery .append 添加“编辑”按钮