2012-02-04 51 views
22

我使用的是觸發調用得到自定義事件的值,但我想它返回一個值,並且其只給我對象的對象,當我做以下電話:jQuery的:返回值從觸發

var user_id=$("#my_div").trigger("get_id", [username]); 

我的觸發事件函數如下所示:

$("#my_div").on("get_id", function(e, username){ 
    var user_id; 
    if (username='fred'){ 
     user_id=1; 
    } 
    else if(username='mario'){ 
     user_id=2; 
    } 
    return user_id; 
}); 
+0

的可能重複[使用jQuery .trigger調用返回一個值的自定義函數(http://stackoverflow.com/questions/3142724/use-jquery-trigger-to-call-a-custom-function-這-回報-A值) – 2014-07-10 09:16:41

回答

29

不能從觸發器返回一個值,但你可以在許多不同的方式存儲信息,一種方法是使用一個對象作爲參數:

//event 
$("element").on("click", function(event, informationObj) { 
     informationObj.userId = 2; //you have to access a propery so you can modify the original object 
}); 
//trigger 
var informationObj = {userId : 0}; 
$("element").trigger("click", [informationObj ]); //informationObj.userId === 2 

另一種方法是使用jQuerys .data()方法

//event 
$("element").on("click", function() { 
    $(this).data("userId", 2); 
}); 
//trigger 
$("element").trigger("click").data("userId") //2 

你能做的就是修改者的活動以外聲明的變量,然後調用觸發後使用它的另一件事,將其存儲在具有與this關鍵字這樣的事件的元素屬性:

//inside the event function 
this.userId = 2; 

//outside the event 
$("element").trigger("click").get(0).userId 

希望它能幫助。

編輯:

而且,看看下面@Arm0geddon answer,使用.triggerHandler(),只是要小心,它有一定的副作用,如不冒泡的DOM層次結構。

+0

請問用異步AJAX這項工作? – 2014-07-10 09:10:51

+0

我不這麼認爲... – 2014-07-10 09:22:49

1

trigger函數不返回您從事件處理程序返回值。

它返回jQuery object ...

.trigger(EVENTTYPE [,extraParameters])返回:jQuery的

docs

這樣做的目的,所以你可以這樣寫:

$("#my_div").trigger("get_id", [username]).val('foo').css('color', 'red'); 
+0

玉以及在這種情況下,是有一些方法,我可以推入jQuery對象,以便它可以訪問? – 2012-02-04 22:58:10

+0

@Petty_Crim。這不是一個好主意,將它保存在一個變量或**隱藏輸入**中。 – gdoron 2012-02-04 23:00:30

+0

我想我只是把它分配給一個數據對象,即$(「#my_div」)。數據(「USER_ID」,USER_ID),但我希望會有一個替代解決方案。 – 2012-02-04 23:05:11

2

觸發器無法返回響應,因爲它是回調方法。

另外jQuery有一個流暢的API,所以.trigger()總是返回$(this)
你可以寫$("#my_id").trigger(something).show().on(someelse)...

22

你可以做的是使用'.triggerHandler()'而不是'.trigger()'。這將返回一個值。 triggerHandler docs

var user_id=$("#my_div").triggerHandler("get_id", [username]); 
+6

這是我正確的答案。 – Tim 2014-06-27 20:27:14

+2

只是提防'triggerHandler'不會做同樣的事情作爲觸發,這可能會導致意外的錯誤。文檔涵蓋了這些差異,例如不冒泡DOM層次結構或不引起事件的默認行爲發生。 – NicoSantangelo 2014-07-11 16:06:34

1

試試這個:

$("#my_div").on("get_id", function(e, username){ 
    var user_id; 
    if (username='fred'){ 
     user_id=1; 
    } 
    else if(username='mario'){ 
     user_id=2; 
    } 
    return user_id; 
}); 

var user_id=$("#my_div").triggerHandler("get_id", ["username"]); 
0

triggerHandler是正確的答案,但值得指出的,因爲我在這裏沒有看到它尚未... 您可以通過另一個回調一起爲好,讓你的「on」函數調用傳遞的回調來設置一些返回值等。假設最好不要等待某種原因。