jQuery AJAX-创建DOM元素

jQuery AJAX-创建DOM元素,jquery,Jquery,我在jQuery中使用了这个函数,在那里我用AJAX和PHP获得了新的帖子。然后创建一个新的div并将post附加到其中 这是我的密码: function getMorePosts(latestPost){ $.ajax({ type: "POST", url: "/includes/classes/handler.php?do=getMorePosts", data: "&latestPost="+latestPost,

我在jQuery中使用了这个函数,在那里我用AJAX和PHP获得了新的帖子。然后创建一个新的div并将post附加到其中

这是我的密码:

function getMorePosts(latestPost){

    $.ajax({
        type: "POST",
        url: "/includes/classes/handler.php?do=getMorePosts",
        data: "&latestPost="+latestPost,
        cache: false,
        success: function(data){
            if(data){
                $('#addUpdate textarea').val('');
                $('<div id="newPosts"></div>').insertAfter('.myDeskAdd');
                $(data).prependTo('#newPosts');
            }
        }
    });
    return false;
}
函数getMorePosts(最新Post){
$.ajax({
类型:“POST”,
url:“/includes/classes/handler.php?do=getMorePosts”,
数据:“&latestPost=“+latestPost,
cache:false,
成功:功能(数据){
如果(数据){
$('#addUpdate textarea').val('';
$('').insertAfter('.myDeskAdd');
$(数据).prependTo(“#newPosts”);
}
}
});
返回false;
}
现在,数据都是来自myhandler.php的HTML代码。一切正常,正在追加,我可以在屏幕上看到结果。这是正确的-很好

但我的问题是: 当它被添加到屏幕上时,就好像我不能“使用”DOM元素一样。例如:我有一个可以单击的图像,然后它必须从jQuery调用警报,但它不是。所有其他绑定到创建的dom元素的jQuery效果都不起作用

如果我按F5,那些不起作用的元素不起作用


我尝试了
html()
prepend()
append()
等等。

您需要使用或使用适当的参数将事件绑定到新添加的DOM元素。

除非您使用事件委派,否则事件处理程序仅适用于运行绑定它们的代码时存在的元素,因此,以后任何动态添加的元素都不会绑定事件处理程序,并且您的功能也不会工作


查看(jQuery 1.7+)或(在jQuery 1.7之前)函数,了解有关事件委派的更多信息。

动态生成元素时,它们不会附加到以前的事件处理程序

你必须使用。方法来委托事件处理程序

例如:

代表团示例:


现在,每次使用类yourmajoreventhandler生成一个元素时,上面的函数都会运行。

如何将事件绑定到要添加的DOM元素?它们是元素的属性还是使用jQuery绑定它们?如果是前者,您将需要发布更多代码,但我猜是后者,在这种情况下,您将需要使用绑定事件

绑定事件时,它仅应用于当前存在的元素。它们不会传播到新元素。使用
on()
方法也可以通过绑定到所有新元素来解决此问题。

对于所有动态内容(从ajax加载),请使用jQuery on绑定方法。那么它应该会起作用

而不是这个,

 $(".imageClass").click(function(){
    alert($(this).html());    
 });
用这个

 $(".yourContainerDiv").on("click", ".imageClass", function(event){
     alert($(this).html());    
 });

将内容追加到页面后,必须重新绑定事件处理程序。或者查看jQuery的
on
来委派事件。如何重新绑定事件处理程序?我来看看OnThat的用法。
。on()
没有设置事件委派,这是动态生成的内容所需要的。@AnthonyGrist,是的。在评论之前,你为什么不做些调查呢<代码>$(元素)。在(“单击”,“选择器”,函数(){})@AnthonyGrist,查看我的另一个答案中的演示,以证明我的观点我的评论是16分钟前的,远远早于您编辑答案以包含事件委派的正确用法-当时,我的评论是有效的,因为您的答案不正确。这种态度是不必要的。@AnthonyGrist,
示例的哪一部分你不明白?我链接了文档以显示整个用法。从什么时候开始,我必须为OP编写完整的代码才能让他现在开始。我会完全删除我的普通click()方法,并用.on()替换它吗?还是应该在函数getMorePosts()中使用on()?但是,当单击星型img时,我不需要将处理程序绑定到元素。我需要通过ajax函数将处理程序绑定到新加载的元素。我该怎么做呢?如果您只想绑定到新加载的内容,那么在预先编写好内容之后,在ajax成功事件中绑定它
 $(".imageClass").click(function(){
    alert($(this).html());    
 });
 $(".yourContainerDiv").on("click", ".imageClass", function(event){
     alert($(this).html());    
 });