[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
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

Poser une question

AMHA, au contraire, ce serait intéressant de savoir ce qui se passe ici...
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 !
ç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);
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);