回调.trigger函数

时间:2012-04-20 12:39:13

标签: jquery ajax

我有以下代码:

 $("#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 个答案:

答案 0 :(得分:2)

使用.load回调

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

rtm http://api.jquery.com/load/了解其他回调参数等。

答案 1 :(得分: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绑定,并获得该范围和特定的行为!!! ...

答案 2 :(得分:0)

$("#publicationBlockContent").load"/Publication/EventSchedule?eventId=" + eventId + "&type=" + type,    
function (responseText, textStatus, XMLHttpRequest) {     
if (textStatus == "success") {          
alert("success")
}
 if (textStatus == "error") {
      alert("failed")
 }
} 

答案 3 :(得分: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");
});