加载ajax内容后单击不工作

时间:2012-11-27 13:09:18

标签: jquery ajax

如何在ajax调用之后生成实时('click',function()“工作并使用html(数据)返回内容? 经过4个小时的搜索,我想我最好问,因为我无处可去。

这部分正在运作:

$.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) { } 
    });
});

我需要这个在上面的ajax中工作:

$('.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); 

});

4 个答案:

答案 0 :(得分:23)

.live()已弃用。请改用.on()

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

另外,为了确保你正确地调用div,它不应该是以这种方式调用它时应该是div类的div名。

此外,使用live()on()需要在文档加载时存在的父级别应用。如果您正在使用的divName在页面加载时不存在,则无法绑定。但是,如果绑定到body元素,那么它将始终在单击发生时查找div。

答案 1 :(得分:9)

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

答案 2 :(得分:0)

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

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

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

希望这有帮助。

答案 3 :(得分:0)

简单,因为在加载js后附加数据,你需要使用...

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

请注意,如果你经常这样做会有性能损失,在某些情况下手动取消绑定和重新绑定可能会更好。