JQuery:当.load()完成插入新的html时执行调用?

时间:2011-04-28 14:10:24

标签: jquery

我有一个函数,我调用将从php文件返回的html加载到div中。一旦将html放在div中,我希望它为显示div的colorbox调用jquery函数。我遇到的问题是在html实际放入div之前执行回调。当html实际完全放入div时,有没有办法让jquery运行一个函数,而不是刚刚完成执行php时?

该功能看起来像这样......

function viewDetails(vinNum){
    $('#detailsContainer').load('/actions/myfile.php?var='+myVar,function(){
        $(".example3").colorbox({transition:"elastic", speed:"100", inline:true, href:"#hiddenModalContentbox"});
    });
}

问题是在实际完成将html放入div之前调用回调。这可能是由于php在等待mysql给它需要的数据时推出一些html引起的吗?如果是这样,我应该检索所有数据并立即回显所有html吗?


编辑: 这就是我现在尝试过的,结果相同。我还为正在加载的php文件添加了一个javascript警报。在回调调用颜色框之后调用警报。

function viewDetails(myVar) {
    $.ajax({ 
        url: '/actions/myfile.php', 
        data: 'var=' + myVar,
        success: function(html) {
            $('#detailsContainer').html(html);
        },
        complete: function(){
            $(".example3").colorbox({transition:"elastic", speed:"100", inline:true, href:"#hiddenModalContentbox"});
        }
    });
}

EDIT FINAL:我发现彩盒从一开始就被称为不正确。我从其他人那里继承了一些代码,我认为它设置正确。我所要做的就是删除(“.example3”)类调用,它工作得很好。该类调用将该方法附加到该类的任何链接,从而在回调完成之前调用它。所有回调都是将colorbox方法重新分配给具有该类的项目。我所有的谣言都可能让事情变得清晰,但是感谢所有人的投入。这是最后的工作电话......

$('#detailsContainer').load('/actions/myfile.php?var='+myVar,function(){
        $.colorbox({transition:"elastic", speed:"100", inline:true, href:"#hiddenModalContentbox"});                                                                   
    });

4 个答案:

答案 0 :(得分:0)

更好的方法是实际使用$.ajax()。这将打开你的方法,如ajaxStart,ajaxStop,完成,错误,成功等。使用.load()拉动$ .ajax(),所以你也可以给自己带来它所带来的所有好东西。

答案 1 :(得分:0)

您可以下载到$.get$.ajax并在调用彩盒之前自行插入HTML,从而验证它是否已发生。

function viewDetails(vinNum) {
    $.ajax({ 
        url: '/actions/myfile.php', 
        data: { var: myVar },
        success: function(html) {
            $('#detailsContainer').html(html);
            $('.example3').colorbox ...
        }
    });
}

答案 2 :(得分:0)

我原以为php不太可能在获取数据之前回复某些HTML,但它还取决于你在脚本中回显数据的位置。

说过我也发现.load()有问题,但我没有花足够的时间试图找出原因。我的问题略有不同,因为我想在页面上动态创建元素。

等一下该死的你们这些人很快......参见T Stone的回答

答案 3 :(得分:0)

不,在内容实际加载后回调正在执行,但是如果元素是动态加载的,那么你尝试使用的插件(colorbox)可能不起作用。

验证这一点的最佳方法是尝试提醒来自已加载部分的内容,例如:

console.log($('.example3').html());

如果它显示了元素内容,那么当回调被触发并且唯一的罪魁祸首是colorbox时,内容将被加载并通过DOM访问。

为了演示load()的回调确实在加载的内容实际附加到DOM之后触发,这是一个小的演示: http://jsfiddle.net/3ZAQB/1/