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;
});
24
demandé sur gdoron 2012-02-05 02:51:07

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.

32
répondu NicoSantangelo 2017-05-23 12:17:44

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]);
23
répondu Arm0geddon 2014-09-11 15:59:53

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)...

2
répondu Julien Lafont 2016-12-15 11:04:47

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

docs

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');
1
répondu gdoron 2012-02-04 22:55:09

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"]);
1
répondu PretorDH 2014-01-19 15:29:53

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.

0
répondu MistereeDevlord 2014-02-26 08:25:31