0

我有以下代码:

 $("#scheduleLink").trigger("click");
 alert("text")

这是点击处理程序:

$("#scheduleLink").bind("click", (function () {
            loadScheduleEvent();
            $(".wrap_tabs").find("a").removeClass("active"); 
            $(this).addClass("active");
        }));

loadScheduleEvent功能:

function loadScheduleEvent() {
        var eventId = $(".movie").attr("eventId");
        var type = $(".movie").attr("type");
        $("#publicationBlockContent").load("/Publication/EventSchedule?eventId=" + eventId + "&type=" + type);
    }  

我想这段代码是异步工作的。我希望alert("text") 仅在完成时调用loadScheduleEvent。我怎样才能做到这一点?

谢谢。

更新: 事实上,不是alert("text")有一些代码。而且,我无法将此代码移至 $.load 函数回调。

4

4 回答 4

2

使用 .load 回调

$("#publicationBlockContent")
    .load("/Publication/EventSchedule?eventId=" + eventId + "&type=" + type,
          function(){alert("text");}
    );

rtm http://api.jquery.com/load/用于附加回调参数等。

于 2012-04-20T12:40:25.833 回答
1

如果您不想将代码替换为警报,那么您可以做的就是触发一个事件,该事件触发您的行为被警报替换。

$("#scheduleLink").bind("click", (function () {
        loadScheduleEvent();
        $(".wrap_tabs").find("a").removeClass("active"); 
        $(this).addClass("active");
    }));



$(window).bind("scheduleComplete", (function (event,params) {
      alert(params);
    }));

现在在 loadScheduleEvent 你必须触发它。

 function loadScheduleEvent() {
    var eventId = $(".movie").attr("eventId");
    var type = $(".movie").attr("type");
    $("#publicationBlockContent").load("/Publication/EventSchedule?eventId=" + eventId + "&type=" + type,function(){$(window).trigger("scheduleComplete");});
}

最后,当你执行这个序列时,你只需要触发点击事件

$("#scheduleLink").trigger("click");

此外,如果您不希望 scheduleComplete 事件对窗口公开,您也可以将它与您的 scheduleLink 绑定,并获得该行为的范围和具体!!!...

于 2012-04-20T13:43:33.823 回答
0
$("#publicationBlockContent").load"/Publication/EventSchedule?eventId=" + eventId + "&type=" + type,    
function (responseText, textStatus, XMLHttpRequest) {     
if (textStatus == "success") {          
alert("success")
}
 if (textStatus == "error") {
      alert("failed")
 }
} 
于 2012-04-20T12:46:00.547 回答
0

看起来有3个解决方案:

1 - 创建一个函数,并从 .load 上的回调调用它

function loadComplete() {
    alert("text");
}

$("#scheduleLink")
.on("click", function () {

    $("#publicationBlockContent")
    .load("/my-url", function () {
        loadComplete();
    });

})
.trigger("click");

2 - 将自定义事件绑定到名为“loadComplete”的 $("#scheduleLink"),并从 .load 上的回调触发它

$("#scheduleLink")
.on("loadComplete", function () {
    alert("text");
})
.on("click", function () {

    $("#publicationBlockContent")
    .load("/my-url", function () {
        $("#scheduleLink").trigger("loadComplete");
    });

})
.trigger("click");

3 - 如果不需要 .load,可以使用 $.ajax、$.get 和 $.post 支持的 promise 对象

$("#scheduleLink")
.on("click", function () {

    return $.get("/my-url", function () {
        $("#scheduleLink").trigger("loadComplete");
    });

})
.trigger("click");

var promise = $("#scheduleLink").triggerHandler("click");
promise && promise.done(function () {
    alert("click");
});
于 2015-02-17T08:34:05.840 回答