【问题标题】:How to simulate an append callback function?如何模拟追加回调函数?
【发布时间】:2011-12-07 06:24:04
【问题描述】:

我知道.append()没有任何回调函数,但是当我尝试这样做时:

$.onShadowboxFinished = function (f) {

var postid = $(f.link).parent().attr("id");
var loadUrl = "wp-admin/admin-ajax.php?action=mfields_show_post&p=" + postid;
$('#infos_wrap').load(loadUrl).append();
alert("loaded! test selector :"+$('a.projectimgs').first().attr("href"));

}

我正在将内容(链接和图像)加载到 div #infos_wrap。加载所有链接和图像后,我想操作内容(例如:选择链接以将它们添加到 shadowbox 缓存)

目前,第 4 行在第 3 行之前执行。

感谢您的帮助!

PS:如果有人真的想帮忙(我会很感激 ^^)
您可以查看网站:http://www.tom-portfolio.fr/wp-login.php
登录:访客
通行证:访客
javascript 文件是 portfolio.js
使用您的 firebug 或 GoogleDev 工具来查看它!
非常感谢!

【问题讨论】:

    标签: jquery load append shadowbox


    【解决方案1】:

    您要做的是为.load() 函数使用回调函数,因为它是异步的(意味着代码在它继续执行直到收到响应并触发其回调函数之后):

    var postid  = $(f.link).parent()[0].id,
        loadUrl = "wp-admin/admin-ajax.php?action=mfields_show_post&p=" + postid;
    
    $('#infos_wrap').load(loadUrl, function () {
        alert("loaded! test selector :"+$('a.projectimgs').first()[0].href);
    });
    

    请注意,.load() 将替换 #infos_wrap 的内容为来自 AJAX 调用的响应(在本例中为 #infos_wrap),因此我们不必使用 .append()(内部使用 .html()替换所选元素的 HTML,而不是附加响应)。

    另请注意,我更改了几个不需要的 .attr() 实例。

    .load() 的文档:http://api.jquery.com/load

    【讨论】:

    • 感谢您的回答!但是,我应该明确链接a.projectimgs 是通过 ajax 加载的。
    • $('a.projectimgs').attr("href") 仍然未定义:在内容加载到 div 之前出现警报
    • @KouiK 确保<a> 标签具有href 属性,否则选择它们将不会返回任何内容。由于我们使用.load() 的回调函数,内容在那里,我们可能只是没有正确选择它。这是我的代码工作示例:apexeleven.com/stackoverflow/jquery.load
    • 我的链接当然有 href 属性。但是我在“警报”行出现以下错误:未捕获的类型错误:Cannot call method 'first' of null:这意味着选择器在加载的内容附加到它之前扫描 DOM...如何确保警报仅在内容已加载到 div 中?我会检查你的链接。谢谢
    • @KouiK 当回调函数触发时,您太快假设服务器的响应没有加载到 DOM 中。只记录回调函数中的 jQuery 选择器:console.log($('a.projectimgs'));
    猜你喜欢
    • 1970-01-01
    • 2015-12-18
    • 2020-03-25
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    相关资源
    最近更新 更多