在replaceWith之后没有注册的事件

时间:2009-04-20 22:07:13

标签: jquery events dom

当我replaceWith一个要从DOM中带出一个元素的元素,然后replaceWith重新进入时,注册到它的事件不会触发。我需要事件保持不变。

这是我的Javascript:

var replacement = $(document.createElement('span'));
var original = $(this).replaceWith(replacement);

replacement
    .css('background-color', 'green')
    .text('replacement for ' + $(this).text())
    .click(function() {
        replacement.replaceWith(original);
    });

Live demo

在演示中,当您单击某个元素时,会使用replaceWith将其替换为另一个元素。单击新元素时,将使用replaceWith将其替换为原始元素。但是,点击处理程序不再起作用(我认为它应该在那里)。

3 个答案:

答案 0 :(得分:11)

因为当您替换原始元素时,会删除绑定到它的事件。调用click后,您需要在original上重新附加replacement.replaceWith(original)事件处理程序:

$(function() 
{   
   function replace() 
   {
      var replacement = $(document.createElement('span'));
      var original = $(this).replaceWith(replacement);

      replacement
         .css('background-color', 'green')
         .text('replacement for ' + $(this).text())
         .click(function() 
         {
            replacement.replaceWith(original);
            original.click(replace);
         });
   }

   $('.x').click(replace);
});

答案 1 :(得分:4)

更新live()bind()已被弃用,赞成on()

您可以使用live()bind()个活动,这是您的新代码:

$(function() {
$('.x').live('click', function() {
    var replacement = $(document.createElement('span'));
    var original = $(this).replaceWith(replacement);

    replacement
        .css('background-color', 'green')
        .text('replacement for ' + $(this).text())
        .bind('click', function() {
            replacement.replaceWith(original);
        });
});
});

-Live事件适用于jQuery 1.3及更高版本。

- 如果您想停止使用die()功能进行实时传播。

答案 2 :(得分:3)

你正在寻找

live events

相关问题