2012-11-27 50 views
4

如何在ajax调用后使用('click',function()“工作并返回带有html(数据)的内容? 经过4小时的搜索后,我想我会更好的问,因为我越来越无处ajax内容加载后点击不工作

这部分工作:

$.ajax({ 
    type: "POST", 
    url: "loadAlbum.php", 
    data: dataString, 
    success: function(data){ 
     $(".loader").html(data, {}, function(){ 
     //content is loaded now 
     //need to get the function below working in this part of the content 
     }); 
    }, 
    error : function(data) { } 
    }); 
}); 

我需要这一个在阿贾克斯工作上面:

$('.divName as inside loader').live('click',function(){ 

alert('gotClicked'); 

    var vidItem = $(this).attr('data'); 
    vidItem = vidItem.split('-'); var bookID = vidItem[0]; var state = vidItem[1]; 
    var dataString = 'bookID='+ bookID + '&state=' + state; 

alert(dataString); 

}); 
+1

虽然使用live()并不理想,但你应该有什么工作。你看到你的'gotClicked'警报吗?或在控制台中的任何错误? –

+0

ajax完成并显示内容后,我什么都没有收回。对不起,现场...我们仍然有一个老jQuery运行。 – KJS

+0

使用$(选择器).on()函数。从jQuery 1.7开始,.live()方法已被弃用。 http://api.jquery.com/on/ –

回答

20

.live()是德普雷cated。改为使用.on()

$("body").on("click", "divClass", function(event){ 
    alert('gotClicked'); 
}); 

而且,只是为了确保你能正确地调用DIV,它不应该以那种方式调用它时它应该是DIV类的div名称。

此外,使用live()on()需要应用于文档加载时存在的父级别。如果你使用的这个divName在页面加载时不存在,它就不能被绑定。但是,如果绑定到body元素,那么点击发生时它总是会查找div。

+0

这听起来很甜蜜“if你绑定到body元素“。我想我猜出一个。有没有一个很好的例子可以使用? – KJS

+0

@KJS:我能想到的最好的例子是在'on'的实际文档中。 http://api.jquery.com/on/ –

+0

@KJS:哦,我上面的代码示例绑定到body元素。它应该捕获任何点击“”类别为'divClass'的元素。 –

0

由于您正在追加通过ajax调用返回给您的HTML数据,因此需要在将新HTML添加到DOM后绑定该函数。如果您拨打代码:

$('.divName as inside loader').live('click',function(){ ... 

在DOM更新之前,jQuery将无法正确地绑定事件。我不知道你何时解析/设置代码.live代码块。在将返回的HTML附加到DOM后,您必须应用.live代码,无论是成功回调还是成功回调后调用的函数(如果有)。

希望这会有所帮助。

0

简单,因为数据被加载JS后附加您需要去...

$(selector).live('click', function(e){ 
    alert('this is a click'); 
}); 

被警告,有一个性能命中,如果你这样做了很多,也可能是在某些情况下更好地手动解除绑定并重新绑定。

7
$(document).delegate(".classname","click",function(){ 
     alert("ok"); 
    }); 
+2

这是完美的工作。 –

+1

我会为你祈祷。 –