与jquery after()行为混淆

时间:2011-07-22 04:30:59

标签: javascript jquery

以下是一段让我疯狂的jquery代码

var count = 0;
    $('#some-element-id').click(function(){
        var currentElement = '#new-div-id-'+count;
        $(currentElement).after($('<div id="new-div-id-'+(++count)+'">Hello World!<span class="delete_me">x</span></div>'));
});

$(".delete_me").click(function () {
  alert('Deleting!');
});

现在,当我点击标识为some-element-id的元素时,会插入一个新div,我会看到x字符。但是点击x并没有做任何事情。没错。根据{{​​3}},我可以通过这种方式插入元素,这样可以正常工作。我可以使用Firebug来获取DOM树中的新元素。现在为什么当我点击span时没有发生任何事件?由于某些未知原因,我被迫使用jQuery 1.3.2但这应该不是问题。

更新1 我理解我正在尝试将一个偶数绑定到DOM中不存在的元素。但请注意,即使不是解雇,也会在元素嵌入DOM后触发事件。我使用了以下代码甚至它不起作用

$("span.delete_me").live('click',function () {
  alert('Deleting!');
});

控制台上没有错误。 更新2 这是实际呈现的代码http://api.jquery.com/after

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

使用live方法:

$(".delete_me").live("click", function () {
  alert('Deleting!');
});

当您在帖子中调用.click方法时,&#34; x&#34;不存在。

答案 2 :(得分:0)

$(".delete_me").live('click',function () {
  alert('Deleting!');
});

你的.click()无效,因为你调用.click()时.delete_me类不在DOM中,因此永远不会发生绑定。 .live()确保对在运行时创建的元素进行绑定。

答案 3 :(得分:0)

嗯,你需要用live()

来做
$(".delete_me").live('click',function () {
  alert('Deleting!');
});

live()将适用于动态添加的对象

http://api.jquery.com/live/