J'utilise un prototype pour attacher des gestionnaires d'événements à un certain nombre de champs de formulaire. Les champs de formulaire sont nommés "ContactAddress", "ContactCity", "ContactState", "ContactZip" ainsi qu'un autre jeu commençant par "ContactProfile". Maintenant, l'événement doit être en mesure de faire la différence entre le moment où je mettre à jour un champ « Contact » et un champ « ContactProfile » J'ai donc une structure de données et le code qui fonctionne comme ceci:Javascript/Prototype ajoutant deux gestionnaires d'événements à un seul champ quand j'en veux un
var geos = {
'Contact' : [
'Address', 'City', 'State', 'Zip'
],
'ContactProfile' : [
'Address', 'City', 'State', 'Zip'
]
};
// Called on page load
function watchGeo() {
for(prefix in geos) {
geos[prefix].each(function(item) {
$(prefix + item).observe('change', function() {ajaxgeolocate(prefix, item);});
})
}
}
// Doesn't actually geolocate anything yet, just tells me that the event works and what params got passed.
function ajaxgeolocate(prefix, suffix) {
alert(prefix + " " + suffix);
}
À En chargeant la page, quand je change l'un des champs ContactProfile, il me donne une boîte d'alerte qui dit "ContactProfile Address" (par exemple) comme il se doit. Cependant, si je change l'un des champs de contact, il me donne une boîte d'alerte qui indique également "ContactProfile Address". Curieux, j'ai inspecté le terrain et j'ai découvert que deux gestionnaires d'événements avaient été ajoutés à tous les champs Contact, au lieu d'un seul. Les champs ContactProfile ont tous un événement, comme ils le devraient.
Que se passe-t-il ici?
Aucune offense, et j'apprécie la réponse finale, mais vous littéralement répondu à ma question dans une minute ou deux de mon affectation, et à première vue il ne me semble pas que vous aviez même compris la question en premier lieu. Après quelques autres coups de ma tête contre le mur, j'ai finalement déroulé la boucle et je n'ai pas vérifié pendant quelques jours, donc je n'ai pas vu ta réponse finale jusqu'à maintenant. Néanmoins, j'apprécie le fait que vous avez fait l'effort supplémentaire d'obtenir une réponse correcte, et pour cela vous obtiendrez une acceptation. :) – AlexMax