jquery.live()的错误?

时间:2011-09-29 03:57:21

标签: jquery

任何人都可以向我解释发生了什么事吗?

http://jsfiddle.net/K5yvp/2/

所以“实现”错误的方法是:

  • 单击“显示父级”或“显示父级2”
  • 点击下一步提醒
  • 点击隐藏隐藏(我甚至用html('')删除内容)
  • 再次单击“显示父级”或“显示父级”
  • 点击下一步
  • 的Bam!发生了两次警报!
  • 重复发生越来越多的提醒

我知道我在小提琴中写的代码并不好,因为它只是我昨天发现的问题的简化版本。基本上我的意思是:

  • Show Parent和Show Parent 2实际上是一个调用AJAX来显示专辑内容的按钮(当然可以超过2个)
  • < p class =“next”> Next< / p为H.是从AJAX请求返回的数据的表示。
  • 可以点击每个数据以及从AJAX返回的数据。在这个小提琴上,我只是用“显示父母/显示父母2”(应该是“专辑”)的标题警告“aaa”。这就是我在show click事件中包含jquery click事件的原因,因为我需要在show click事件中请求的AJAX传递的数据(希望这很清楚)

我已经尝试了一些方法来解决这个问题,但是我的代码产生错误(?)仍然让我很烦恼。其中一些是:

  • 更改$('。parent')。html(''); to $('。parent')。remove();但当然div类父母将会消失,我将不得不重新创建它,这不是我想要的。也许我可以做$('。parent *')。remove();删除父div中的所有元素,但这是我的最后手段。这是一个令人困惑的问题,因为firebug只显示了< p class =“next”>一度存在。
  • 将下一个点击事件移到show click事件之外。 show click事件将AJAX请求返回的数据存储在某个div中,下一个click事件将从该div获取数据。解决方法但是有更好的方法吗?

希望这很清楚。谢谢!

2 个答案:

答案 0 :(得分:2)

错误可能在于您对live的理解。 Live不运行一次,并将处理程序附加到它找到的每个元素。相反,它允许您将处理程序附加到可能尚不存在的元素

因此,每次在你的小提琴中点击这一行:$('.next').live('click',function(){时,你要为每个具有曾经的类next的对象安装另一个处理程序,即使这样对象尚未创建。

答案 1 :(得分:1)

var title
$('.show').live('click',function(){
     title = $(this).attr('title');
    $('<p class="next" />').text('next').appendTo($('.parent'));
    $('<p class="hide" />').text('hide').appendTo($('.parent'));
    $('.parent').fadeIn(500,function(){

});
});    

$('.hide').live('click',function(){
     $('.parent').empty();
});

$('.next').live('click',function(){
        alert('aaa '+title);
        return false;
    });