Passer la fonction anonyme à un déclencheur d'événements personnalisé dans JavaScript / jQuery
-
29-10-2019 - |
Question
J'essaie de déclencher des événements personnalisés sur les éléments DOM et de passer des fonctions anonymes à exécuter lorsque l'événement est déclenché (en utilisant jQuery). Donc quelque chose comme ça:
$(some-dom).live("custom_event", function(evtObj, data, callback) {
//do some stuff
callback();
});
$(some-button).click(function() {
$(some-dom).trigger("custom_event", some_data, function () {
alert("this is my anonymous function passed as event data");
}
});
Donc, cliquer sur "Some Button" devrait déclencher "Custom_event" sur "Some-Dom" et provoquer l'exécution de la fonction anonyme que j'ai transmise sur le déclencheur. Droit? Mais le navigateur dit que le rappel n'est pas défini dans l'événement personnalisé. Est-ce que je fais quelque chose de mal? Le passage des fonctions anonymes est-elle comme des arguments de déclenchement n'est-il pas autorisé? Merci
La solution
Vous devez transmettre plusieurs arguments supplémentaires à trigger()
comme un tableau. (Un argument peut être passé sans le tableau.)
$(some-dom).click(function() { // v-----pass extra args in an Array
$(some-dom).trigger("custom_event", [some_data, function () {
alert("this is my anonymous function passed as event data");
}]);
// ^------Array
});
Exemple: http://jsfiddle.net/nrsj2/
Autres conseils
Vous pouvez le faire comme ceci:
$('#testelement').live("test_event", function(e, myCallback) {
myCallback();
});
$('#clickme').click(function(e){
e.preventDefault();
var myFunc = function () {
alert("this is my anonymous function passed as event data");
};
$('#testelement').trigger('test_event', [myFunc]);
});
Voici la preuve de concept.