ajax成功回调中的jquery自定义事件在没有settimeout的情况下无法正常工作

时间:2016-05-16 17:17:43

标签: jquery ajax events callback

我有以下jquery ajax调用:

$.ajax({
  type: "POST",
  url: url,
  data: data,
  success: function (data, textStatus, jqXHR) {                        
     // Without setTimeout, the triggerHandler doesn't work
     setTimeout(function (e) {                           
         $(this).triggerHandler($.Event("CustomEvent"));
     });
  }
});

在另一个地方:

$(this).on('CustomEvent', function (evt) {
  alert("CustomEvent");
});

以上代码显示警告。但是,如果我没有在 setTimeout 中包含 triggerHandler ,则永远不会调用.on,也不会显示警告。任何想法为什么setTimeout似乎是必要的工作?

1 个答案:

答案 0 :(得分:0)

原因是"这个"并不总是"这"。

如果setTimeout方法有效,您的活动就在$(window)上,所以这应该有效:

success: function (data, textStatus, jqXHR) {                        
    $(window).triggerHandler("CustomEvent");
}

顺便说一句,没有必要创建一个jQuery-Event-object。