Jquery: Valor devuelto desde el activador

Estoy usando una llamada de activación para obtener un valor de un evento personalizado, pero quiero que devuelva un valor y solo me dé el Objeto Objeto cuando hago la siguiente llamada:

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

Mi función de evento de activación se ve así:

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

No puede devolver un valor desde un disparador, pero puede almacenar información de muchas maneras diferentes, una forma es usar un objeto como parámetro:

 //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 

de otra manera es usando el método jQuerys .data()

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

Otra cosa que puedes hacer es modificar una variable que se declara fuera del evento y luego usarla después de llamar al disparador, o almacenarla como una propiedad en el elemento que tiene el evento con la palabra clave this como esto:

 //inside the event function this.userId = 2; //outside the event $("element").trigger("click").get(0).userId 

Espero eso ayude.

Editar:

Además, eche un vistazo a la respuesta de @ Arm0geddon a continuación, usando .triggerHandler() , solo tenga en cuenta que tiene algunos efectos secundarios, como no burbujear la jerarquía de DOM.

Lo que puede hacer es usar el ‘.triggerHandler ()’ en lugar de ‘.trigger ()’. Esto es devolverá un valor. documentos de triggerHandler

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

Un disparador no puede devolver una respuesta, porque es un método de callback.

Además, jQuery tiene una API fluida, por lo que .trigger() devuelve siempre $(this) .
Puedes escribir $("#my_id").trigger(something).show().on(someelse)...

La función de trigger no devuelve el valor que devuelve desde el controlador de eventos.

Devuelve el jQuery object

.trigger (eventType [, extraParameters]) devuelve: jQuery

docs

Esto fue diseñado para que pudieras escribir cosas como esta:

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

Prueba esto:

 $("#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"]); 

triggerHandler es la respuesta correcta, pero vale la pena anotarlo ya que aún no lo he visto aquí … También puede pasar otra callback, y su función “on” llama a la callback pasada para establecer un valor de retorno, etc. suponiendo que sea Mejor no esperar por alguna razón.