Javascript 如何在使用Ajax动态创建的元素上触发指令?

Javascript 如何在使用Ajax动态创建的元素上触发指令?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我使用Ajax通过一个名为lambda()的函数动态创建类似于100 div的内容,然后我想用Jquery滚动一个新div(id='new_id'),但失败了,因为 //lambda()//<--create $('#new_id') dynamically $('html, body').animate({ scrollTop: $('#new_id').offset().top }, 500); //lambda()//您可以将函数包装成一个构造,该构造将在ajax调用完成时

我使用Ajax通过一个名为lambda()的函数动态创建类似于100 div的内容,然后我想用Jquery滚动一个新div(id='new_id'),但失败了,因为

//lambda()//<--create $('#new_id') dynamically
$('html, body').animate({
    scrollTop: $('#new_id').offset().top
}, 500);

//lambda()//您可以将函数包装成一个构造,该构造将在ajax调用完成时触发

$( document ).ajaxComplete(function() {
  //your function
});

否则,您可以使用.when()构造以不同的方式获得相同的结果

示例:当两个ajax请求都成功时,执行函数myFunc;如果其中一个请求有错误,则执行函数myFailure

例如:

在两个ajax请求成功后执行函数。(有关ajax请求的成功和错误案例的完整描述,请参阅jQuery.ajax()文档)。

您可以使用ajaxSuccess()查看ajax调用何时完成

大概是这样的:

$( document ).ajaxSuccess(function() {
//lambda()//<--create $('#new_id') dynamically
$('html, body').animate({
    scrollTop: $('#new_id').offset().top
}, 500);
});
$(文档).ajaxSuccess(函数(){

//lambda()//当ajax完全完成时,必须设置动画,因此请尝试以下操作:

    function testAjax(handleData) {
  $.ajax({
    url:"yourURL",  
    success:function(data) {
       $('html, body').animate({
    scrollTop: $('#new_id').offset().top
}, 500);
    }
  });
}

只有在新元素实际创建之后,才能访问它。 使用ajax.done

$.ajax({
  ....
})
  .done(function( data ) {
    $('html, body').animate({
    scrollTop: $('#new_id').offset().top
    }, 500);
  });

每当Ajax请求完成时,jQuery都会触发ajaxComplete()事件。因此,最好使用这种方式,而不是使用ajaxComplete()。这将仅针对此Ajax调用执行。

您的思路是正确的,但您必须考虑谁知道在适当的时候可以滚动哪些内容

知道何时由AJAX添加到页面上的html元素的函数不是chk()函数,因此将滚动条放在那里没有意义,即使chk()函数的结尾应该在lamba()函数的结尾之后

解决问题的最简单方法是将jQuery提供的“complete”函数放在lambda()函数中,但您使用的是$.get函数,它不提供complete选项。这可以通过使用更灵活的函数$.ajax轻松解决,就像使用chk()一样,但不使用类型:“POST”您可以使用类型:“GET”

有了它,您可以使用ajax提供的完整函数准确地知道元素在DOM中何时准备就绪,如下所示

$.ajax(
type:"GET",
url:'ajax/com_pagination.php'
data:{p:p}
success:function(data)
    {
        b.html(data.com);//update the webpage
    },
'json'
error:function() {
    com_in.html("<span class='erreur222'>Error system. If the problem persists, please contact the administration.</span>");
},
complete:function(){
    $('html, body').animate({
        scrollTop: $('#'+data.new_id).offset().top
    }, 500);
);
$.ajax(
键入:“获取”,
url:'ajax/com_pagination.php'
数据:{p:p}
成功:功能(数据)
{
b、 html(data.com);//更新网页
},
“json”
错误:函数(){
com_in.html(“错误系统。如果问题仍然存在,请与管理部门联系。”);
},
完成:函数(){
$('html,body')。设置动画({
scrollTop:$(“#”+data.new_id.offset().top
}, 500);
);

如果你想看一看的话,我也在那里砍掉了一个小JSFIDLE,在你的内容加载后调用这个事件?并且,请发布进行加载的函数在创建元素后,你应该将它放在DOM中,然后你可以选择它,做任何事情,每个JAXComplete都可以很好地工作,但是我在这个p上还有其他ajax函数age和.ajaxSuccess都会触发。您的when+then解决方案不起作用。请参阅我的第一篇帖子,我对其进行了大量详细更新。在KirKill告诉我我使用了错误的函数后,您的答案是.when()和.then(),但不需要when方法,“then”就足够了。您对ajaxComplete()的看法是正确的事件,但当.done()方法不起作用时,它会起作用。请参阅我的第一篇文章,我对其进行了很多详细的更新。在KirKill告诉我我使用了错误的函数后,您的答案是.done()works.ajaxSuccess或ajaxComplete工作得非常好,但我在本页上还有其他ajax函数,并且所有这些函数都会触发.ajaxSuccess。请参阅我的第一篇文章,我对其进行了详细更新。谢谢!事实上,我尝试使用.done(),.when()+.then()和.get()应用先前的答案当我把它们应用到正确的函数中时,方法和所有的工作都很好。所以,多个好的答案,但是你触及了正确的地方。
$.ajax({
  ....
})
  .done(function( data ) {
    $('html, body').animate({
    scrollTop: $('#new_id').offset().top
    }, 500);
  });
$.ajax(
type:"GET",
url:'ajax/com_pagination.php'
data:{p:p}
success:function(data)
    {
        b.html(data.com);//update the webpage
    },
'json'
error:function() {
    com_in.html("<span class='erreur222'>Error system. If the problem persists, please contact the administration.</span>");
},
complete:function(){
    $('html, body').animate({
        scrollTop: $('#'+data.new_id).offset().top
    }, 500);
);