2010-12-02 68 views
0

這可能只是我自己對事件如何工作的無知,但有人可以解釋這一點:自定義事件不會觸發函數的頂部,但會在回調中觸發在那個函數裏面。自定義JQuery事件發生在一個地方,但不是另一個

下工作(自定義事件觸發):

function foo() { 

    $.ajax(... , function() { 
      $.event.trigger("custom" , data); 
    }); 

} 

foo(); 

下不工作(自定義不會觸發事件):

function foo() { 
    $.event.trigger("custom" , data); 

    $.ajax(... , function() { 
      ... 
    }); 

} 

foo(); 

事件綁定如下:

$(document).bind("custom custom1 custom2" , function(event, data) { 
    ... 
}); 

我真的想讓它在函數頂部右擊。任何幫助最受讚賞!

注意:這是跨瀏覽器的相同問題,並且有或沒有額外的數據參數。

+0

最終得到了修剪:...跨瀏覽器的相同問題,並且有或沒有額外的數據參數。 – glortho 2010-12-02 00:05:24

+1

在調用`foo()`之後,你可能綁定了處理函數嗎? – sje397 2010-12-02 00:12:53

回答

1

它在異步回調中工作的事實使我相信,當foo();被調用,實際的綁定沒有發生。當你這樣做時,你需要注意事物的順序。

jwwishart的答案可能是有效的,因爲他先綁定......然後調用foo。如果您按照事件發生的順序發佈整個代碼,但可能更容易調試。

0

以下作品...?

我只綁定了「定製」,甚至,我刪除了其他兩個(把事情儘可能的簡單。)

$(document).bind("custom" , function(event, data) { 
    alert(data); 
}); 


function foo() { 
    $.event.trigger("custom" , "Works"); 
} 

foo(); 
1

data出現在你的第二個(非工作)法是不確定的。

當我定義data時,它按預期工作。

+0

對不起,我應該更忠實於原始代碼。數據始終在觸發器之前定義。但是當我一起刪除數據參數時,我遇到了同樣的問題。 – glortho 2010-12-02 00:15:15

相關問題