GNT sans publicité, site mobile, fonctionnalitées exclusives...

[Prototype] Event.observe ne marche qu'une fois

Le
Jérémie
Bonsoir à tous,

J'ai créé une petite application dans laquelle on navigue de semaine en
semaine avec des icônes en forme de flêches, ayant pour id
cmdSemaineSuivante et cmdSemainePrecedente.

Voici un fragment de JS qui me pose problème :

function bindForm(e)
{
changerSemaine(e);
Event.observe($('cmdSemainePrecedente'), 'click', changerSemaine,
false);
Event.observe($('cmdSemaineSuivante' ), 'click', changerSemaine,
false);
Event.observe($('lstCentre' ), 'change', changerSemaine,
false);
} // bindForm

Event.observe(window, 'load', bindForm , false);





function changerSemaine(evt, typeInf)M
{
Event.stop(evt);

$('indicateur').style.visibility = "visible";
$('indicateur').style.display = "block";

var elt = Event.element(evt).id || '';

var dd = '';
var df = '';
var modeAffichage = $F('txtModeAffichage');
var infirmiere = $F('txtUtilisateur');
var centre = $F('lstCentre');


switch(elt)
{
case 'cmdSemainePrecedente':
dd = $F('txtDateDebutPrecedente');
df = $F('txtDateFinPrecedente');
break;
case 'cmdSemaineSuivante':
dd = $F('txtDateDebutSuivante');
df = $F('txtDateFinSuivante');
break;
default:
dd = $F('txtDateDebutActuelle');
df = $F('txtDateFinActuelle');
break;
}

getXhr();

[ instrcutions AJAX sasn intérêt ]

}

Ce qui est hyper bizarre, c'est que les Event.observe appliqués aux deux
icônes n'intercepte l'évènement qu'une fois, après ils ne réagissent plus.
J'ai encore un select (id lstCentre) qui lui fonctionne sans problème.

Verriez-vous une explication ?

Merci d'avance,

Jérémie
Lire les 25 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 5
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bruno Desthuilliers
Le #773906
Bonsoir à tous,

J'ai créé une petite application dans laquelle on navigue de semaine en
semaine avec des icônes en forme de flêches, ayant pour id
cmdSemaineSuivante et cmdSemainePrecedente.

Voici un fragment de JS qui me pose problème :

function bindForm(e)
{
changerSemaine(e);
Event.observe($('cmdSemainePrecedente'), 'click', changerSemaine,
false);
Event.observe($('cmdSemaineSuivante' ), 'click', changerSemaine,
false);
Event.observe($('lstCentre' ), 'change', changerSemaine,
false);
} // bindForm

Event.observe(window, 'load', bindForm , false);


...


function changerSemaine(evt, typeInf)M
{
Event.stop(evt);
(snip code)

getXhr();

... [ instrcutions AJAX sasn intérêt ]


AMHA, au contraire, ce serait intéressant de savoir ce qui se passe ici...

}

Ce qui est hyper bizarre, c'est que les Event.observe appliqués aux deux
icônes n'intercepte l'évènement qu'une fois, après ils ne réagissent plus.
J'ai encore un select (id lstCentre) qui lui fonctionne sans problème.

Verriez-vous une explication ?


Une hypothèse au moins : tu remplaces cette partie de ton html via Ajax,
et tu ne 'rebinde' (ouch! c'est laid) pas les gestionnaire d'évènement
après.

Jérémie
Le #773905
"Bruno Desthuilliers" écrit dans le message de news: 4742b9c0$0$28306$
Bonsoir à tous,

J'ai créé une petite application dans laquelle on navigue de semaine en
semaine avec des icônes en forme de flêches, ayant pour id
cmdSemaineSuivante et cmdSemainePrecedente.

Voici un fragment de JS qui me pose problème :

function bindForm(e)
{
changerSemaine(e);
Event.observe($('cmdSemainePrecedente'), 'click', changerSemaine,
false);
Event.observe($('cmdSemaineSuivante' ), 'click', changerSemaine,
false);
Event.observe($('lstCentre' ), 'change', changerSemaine,
false);
} // bindForm

Event.observe(window, 'load', bindForm , false);


...


function changerSemaine(evt, typeInf)M
{
Event.stop(evt);
(snip code)

getXhr();

... [ instrcutions AJAX sasn intérêt ]


AMHA, au contraire, ce serait intéressant de savoir ce qui se passe ici...

}

Ce qui est hyper bizarre, c'est que les Event.observe appliqués aux deux
icônes n'intercepte l'évènement qu'une fois, après ils ne réagissent
plus.
J'ai encore un select (id lstCentre) qui lui fonctionne sans problème.

Verriez-vous une explication ?


Une hypothèse au moins : tu remplaces cette partie de ton html via Ajax,
et tu ne 'rebinde' (ouch! c'est laid) pas les gestionnaire d'évènement
après.



Super, c'est exactement ça, merci!! Il suffisait de redemander un
"rebindage" (encore pire!) après le traitement de la réponse AJAX. J'ai donc
juste rajouté un bindForm(evt) dans changerSemaine.

Maintenant j'ai un autre problème :
Je voudrais lancer cette fonction changerSemaine pour récupérer les valeurs
de la semaine en cours.

J'ai donc écrit Event.observe(window, 'load', changerSemaine, false);

Sous FF pas de problèmes, par contre IE me renvoie une erreur au niveau du
Event.stop : Objet requis.
Pourtant si je fais un alert pour voir à quoi correspond evt, et j'ai bien
un [object].

Mystère et boule de gomme !


SAM
Le #773904

Maintenant j'ai un autre problème :
Je voudrais lancer cette fonction changerSemaine pour récupérer les valeurs
de la semaine en cours.

J'ai donc écrit Event.observe(window, 'load', changerSemaine, false);

Sous FF pas de problèmes, par contre IE me renvoie une erreur au niveau du
Event.stop : Objet requis.
Pourtant si je fais un alert pour voir à quoi correspond evt, et j'ai bien
un [object].


ça veut sans doute dire que cet [object] (evt ?) n'est pas suffisamment
défini pour lui

que dit alert(typeof(evt)); ?

Jérémie
Le #773903

Maintenant j'ai un autre problème :
Je voudrais lancer cette fonction changerSemaine pour récupérer les
valeurs de la semaine en cours.

J'ai donc écrit Event.observe(window, 'load', changerSemaine, false);

Sous FF pas de problèmes, par contre IE me renvoie une erreur au
niveau du Event.stop : Objet requis.
Pourtant si je fais un alert pour voir à quoi correspond evt, et j'ai
bien un [object].


ça veut sans doute dire que cet [object] (evt ?) n'est pas suffisamment
défini pour lui

que dit alert(typeof(evt)); ?


Entre temps j'ai un peu changer mon script, et il y a ceci de rajouté.
J'ai donc testé ce que tu m'as demandé dans ce contexte.

function init(event)
{
try {
alert(typeof(event)); // Renvoie object
// bindForm();
changerSemaine(event); // Un alert(typeof(evt)) dans cette
fonction renvoie undefined :-(
} catch(err) {
alert(err.name + " :n" + err.message);
}
}

function bindForm()
{
Event.observe($('cmdSemainePrecedente'), 'click' , changerSemaine,
false);
Event.observe($('cmdSemaineSuivante' ), 'click' , changerSemaine,
false);
Event.observe($('lstCentre' ), 'change', changerSemaine,
false);
} // bindForm

Event.observe(window, 'load', init, false);


Jérémie
Le #773902

Maintenant j'ai un autre problème :
Je voudrais lancer cette fonction changerSemaine pour récupérer les
valeurs de la semaine en cours.

J'ai donc écrit Event.observe(window, 'load', changerSemaine, false);

Sous FF pas de problèmes, par contre IE me renvoie une erreur au
niveau du Event.stop : Objet requis.
Pourtant si je fais un alert pour voir à quoi correspond evt, et j'ai
bien un [object].


ça veut sans doute dire que cet [object] (evt ?) n'est pas suffisamment
défini pour lui

que dit alert(typeof(evt)); ?


Entre temps j'ai un peu changer mon script, et il y a ceci de rajouté.
J'ai donc testé ce que tu m'as demandé dans ce contexte.

function init(event)
{
try {
alert(typeof(event)); // Renvoie object
// bindForm();
changerSemaine(event); // Un alert(typeof(evt)) dans cette
fonction renvoie undefined :-(
} catch(err) {
alert(err.name + " :n" + err.message);
}
}

function bindForm()
{
Event.observe($('cmdSemainePrecedente'), 'click' , changerSemaine,
false);
Event.observe($('cmdSemaineSuivante' ), 'click' , changerSemaine,
false);
Event.observe($('lstCentre' ), 'change', changerSemaine,
false);
} // bindForm

Event.observe(window, 'load', init, false);


Publicité
Suivre les réponses
Poster une réponse
Anonyme