Jquery: valeur de retour de déclencheur

J’utilise un appel déclencheur pour obtenir une valeur de l’événement personnalisé, mais je souhaite qu’il renvoie une valeur et qu’il ne me donne que Object Object lorsque j’effectue l’appel suivant:

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

Ma fonction d’événement déclencheur ressemble à ceci:

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

Vous ne pouvez pas renvoyer une valeur à partir d’un déclencheur, mais vous pouvez stocker des informations de différentes manières. L’une d’elles consiste à utiliser un object en tant que paramètre:

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

Une autre méthode consiste à utiliser la méthode jQuerys .data()

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

Vous pouvez également modifier une variable déclarée en dehors de l’événement, puis l’utiliser après avoir appelé le déclencheur ou la stocker en tant que propriété dans l’élément associé à l’événement avec le mot this clé this, comme ceci:

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

J’espère que ça aide.

Modifier:

Consultez également la réponse @ Arm0geddon ci-dessous, à l’aide de .sortingggerHandler() , mais prenez garde qu’elle a des effets secondaires, comme ne pas faire remonter la hiérarchie du DOM.

Ce que vous pouvez faire est d’utiliser le ‘.sortingggerHandler ()’ au lieu de ‘.sortinggger ()’. Ceci retournera une valeur. documents sortingggerHandler

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

Un déclencheur ne peut pas retourner de réponse, car c’est une méthode de rappel.

De plus, jQuery a une API fluide, donc .sortinggger() renvoie toujours $(this) .
Vous pouvez écrire $("#my_id").sortinggger(something).show().on(someelse)...

La fonction de sortinggger ne renvoie pas la valeur que vous retournez du gestionnaire d’événements.

Il retourne l’ jQuery object

.sortinggger (eventType [, extraParameters]) Retourne: jQuery

docs

Cela a été conçu pour que vous puissiez écrire des choses comme ceci:

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

Essaye ça:

 $("#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").sortingggerHandler("get_id", ["username"]); 

sortingggerHandler est la bonne réponse, mais cela vaut la peine d’être noté, car je ne l’ai pas encore vu ici … Vous pouvez également transmettre un autre rappel, et demander à votre fonction “on” d’appeler le rappel passé pour définir une valeur de retour, etc. Mieux vaut ne pas attendre pour une raison quelconque.