J'utilise la version 1.5 de jQuery. Je regarde la fonction change () de jQuery et plus précisément ce bit:
.change( [ eventData ], handler(eventObject) )
eventData: A map of data that will be passed to the event handler.
handler(eventObject): A function to execute each time the event is triggered.
Qu'est-ce qu'une "carte de données" en JavaScript? Comment puis-je utiliser la fonction de test suivante comme gestionnaire d'événements?
var myHandler = function(msg){alert(msg);};
J'ai essayé ça:
$("select#test").change(["ok"], myHandler);
et les rapports d'alerte [objet Object]
Voir event.data
. Les données ne sont pas passées en argument au gestionnaire, mais en tant que propriété de l'objet événement:
$("select#test").change({msg: "ok"}, function(event) {
alert(event.data.msg);
});
Le gestionnaire accepte toujours un seul argument, qui est l'objet event
. C'est la raison pour laquelle votre alerte affiche "[object Object]"
, Votre fonction imprime l'objet événement.
Si vous souhaitez utiliser des fonctions avec des arguments personnalisés, vous devez les encapsuler dans une autre fonction:
$("select#test").change({msg: "ok"}, function(event) {
myHandler(event.data.msg);
});
ou juste
$("select#test").change(function(event) {
myHandler("ok");
});
Btw. le sélecteur est mieux écrit comme $('#test')
. Les identifiants sont (devraient être) uniques. Il n'est pas nécessaire d'ajouter le nom de la balise.
Qu'est-ce qu'une "carte de données" en Javascript?
Fondamentalement, juste un objet, par exemple:
var data = {
foo: "I'm foo",
bar: "I'm bar"
};
Tous les objets JavaScript sont essentiellement des cartes (aka "dictionnaires" aka "tableaux associatifs").
Comment puis-je utiliser la fonction de test suivante comme gestionnaire d'événements?
En l'enveloppant dans une autre fonction:
$("select#test").change(function() {
myHandler($(this).val());
});
Cela appelle myHandler
avec la valeur de la boîte de sélection chaque fois qu'elle change.
Si vous souhaitez utiliser la partie eventData
, ajoutez un objet avant le gestionnaire:
$("select#test").change({
foo: "I'm foo"
}, function(event) {
myHandler(event.data.foo, $(this).val());
});
Cela appelle myHandler
avec le "I'm foo" comme premier argument, puis la valeur de la boîte de sélection, chaque fois qu'elle change.