2016-05-16 29 views
0

我有以下的jquery ajax調用:jQuery的自定義事件不工作沒有setTimeout的

$.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"); 
}); 

上面的代碼會顯示警告。但是,如果我沒有附上triggerHandler調用setTimeout .on永遠不會被調用,並且不會顯示警報。任何想法(s)爲什麼setTimeout似乎是必要的這樣工作?

+0

發佈完整的js代碼將會有幫助...或者一個最小的工作示例 –

+3

我認爲這是由於'this'的範圍並不是您期望它在$的'success'處理程序內.ajax' –

+0

嘗試把你的ajax的'complete'函數放入。 –

回答

0

原因是「這個」並不總是「這個」。

如果setTimeout方法工作,你的事件是$(window),所以這應該工作:

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

沒有必要的方式來創建一個jQuery的事件對象。

+0

夥計窗口不工作 – jeevanswamy21