Jquery: Retour De La Valeur De Trigger
j'utilise un trigger call a obtenir une valeur de custom event mais je veux qu'il renvoie une valeur et qu'il me donne seulement L'objet Object quand je fais l'appel suivant:
var user_id=$("#my_div").trigger("get_id", [username]);
ma fonction trigger event 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;
});
6 réponses
vous ne pouvez pas retourner une valeur à partir d'un déclencheur, mais vous pouvez stocker des informations de différentes façons, une façon est d'utiliser un objet comme 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
});
//trigger
var informationObj = {userId : 0};
$("element").trigger("click", [informationObj ]); //informationObj.userId === 2
other way utilise jQuerys .data()
méthode
//event
$("element").on("click", function() {
$(this).data("userId", 2);
});
//trigger
$("element").trigger("click").data("userId") //2
une autre chose que vous pouvez faire est de modifier une variable déclarée en dehors de l'événement et de l'utiliser après avoir appelé le déclencheur,ou le stocker comme propriété dans l'élément qui a l'événement avec le this
mot clé comme ceci:
//inside the event function
this.userId = 2;
//outside the event
$("element").trigger("click").get(0).userId
j'Espère que ça aide.
Edit:
aussi, jetez un coup d'oeil à @Arm0geddon answer ci-dessous, en utilisant .triggerHandler()
, il suffit de se méfier qu'il a certains effets secondaires, comme ne pas bouillonner dans la hiérarchie DOM.
Ce que vous pouvez faire est d'utiliser le".triggerHandler()' au lieu de '.déclencher.')( C'est en retourner une valeur. triggerHandler docs
var user_id=$("#my_div").triggerHandler("get_id", [username]);
Un déclencheur ne peut pas retourner une réponse, parce que c'est une méthode de rappel.
en plus jQuery ont une API fluide, donc .trigger()
retourne toujours $(this)
.
Vous pouvez écrire $("#my_id").trigger(something).show().on(someelse)...
trigger
la fonction ne renvoie pas la valeur que vous renvoyez du gestionnaire d'événements.
retourne jQuery object
...
.déclencheur( eventType [, extraParameters] ) Retourne: jQuery
ceci a été conçu pour que vous puissiez écrire des choses comme ceci:
$("#my_div").trigger("get_id", [username]).val('foo').css('color', 'red');
essaye 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;
});
var user_id=$("#my_div").triggerHandler("get_id", ["username"]);
triggerHandler est la bonne réponse, mais cela vaut la peine de noter que je ne l'ai pas encore vu ici... Vous pouvez passer un autre callback ainsi, et avoir votre fonction " on " appeler le callback passé pour définir une valeur de retour etc. en supposant qu'il vaut mieux ne pas attendre pour une raison quelconque.