脚本不能处理加载Ajax的内容

时间:2011-11-08 13:49:36

标签: javascript jquery ajax

我有一个jquery驱动的投票系统,其他页面上的项目是通过ajax加载的,但是在加载了ajax的内容上,jquery投票需要刷新页面才能进行投票处理。

http://ohmygosh.vr.lt/

我认为这个问题属于file(?)中的行为,但我不太确定。我没有任何代码可以启动,因为我甚至不知道从哪里开始。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

似乎您正在使用SmartAjax加载页面内容。 SmartAjax的作用是更改页面URL(使用pushState或hash),加载数据并用加载的内容替换#posts div的内容。

问题在于您正在侦听来自DOM元素的单击事件,这些事件稍后会被删除并替换为新的DOM元素。因此,不会侦听来自ajax加载内容的单击事件。 live()在这种情况下无效。

要解决此问题,您至少有以下两个选项:

1)使用jQuery的delegate()附加处理程序并使用#posts div作为根元素,因为它在加载新内容后仍然存在。

这样的事情应该有效:

$('#posts').delegate(':input', 'click', function() {
    var value = $(this).val();
    alert('You have clicked thumbs up/down, value: ' + value);
    return false;
});

2)在数据加载完成后,为已加载的项添加点击监听器。

注意:启动jQuery 1.7时,您应该使用on()而不是delegate()