Btn1[.]a la valeur Null ou n'est pas un objet
Résolu/Fermé
Ebou_Ljabal
-
27 juil. 2008 à 14:18
Ebnou_Ljabal Messages postés 18 Date d'inscription dimanche 27 juillet 2008 Statut Membre Dernière intervention 27 septembre 2008 - 27 juil. 2008 à 23:59
Ebnou_Ljabal Messages postés 18 Date d'inscription dimanche 27 juillet 2008 Statut Membre Dernière intervention 27 septembre 2008 - 27 juil. 2008 à 23:59
A voir également:
- Btn1[.]a la valeur Null ou n'est pas un objet
- Vente objet occasion entre particulier - Guide
- La méthode range de l'objet _global a échoué ✓ - Forum VB / VBA
- Erreur définie par l'application ou par l'objet ✓ - Forum VB / VBA
- Excel associer une valeur à un mot - Forum Excel
- Ouvrez ce fichier avec un éditeur de texte simple (bloc-notes, textedit, gedit, etc.) pour y découvrir le nom d’un objet. ✓ - Forum Études / Formation High-Tech
9 réponses
el_linwin
Messages postés
519
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
16 août 2008
90
27 juil. 2008 à 15:35
27 juil. 2008 à 15:35
Bonjour Ebnou_Ljabal,
Le problème vient de la variable cpt_btn pour la raison suivante. Quand les fonctions anonymes sont créées, ce n'est pas la valeur de cpt_btn qui est transmise au corps des fonctions, mais la référence de la variable.
En d'autres termes, les fonctions anonymes des boutons vont réagir selon la valeur de cpt_btn au moment de leur invocation, et non au moment de leur création. C'est pour ça que lorsque vous passez par des constantes, cela marche.
Cordialement,
el_linwin
Le problème vient de la variable cpt_btn pour la raison suivante. Quand les fonctions anonymes sont créées, ce n'est pas la valeur de cpt_btn qui est transmise au corps des fonctions, mais la référence de la variable.
En d'autres termes, les fonctions anonymes des boutons vont réagir selon la valeur de cpt_btn au moment de leur invocation, et non au moment de leur création. C'est pour ça que lorsque vous passez par des constantes, cela marche.
Cordialement,
el_linwin
el_linwin
Messages postés
519
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
16 août 2008
90
27 juil. 2008 à 16:34
27 juil. 2008 à 16:34
Bonjour Ebnou_Ljabal,
Je vous suggère ce code:
function action_onmouseover(e)
{ var cnt=0;
// Avec l'objet évènement récupéré dans 'e', on recherche le bouton concerné
while (e.target!=btn1[cnt]) cnt++;
// 'cnt' contient le numéro du bouton, on peut y aller
btn1[cpt_btn].src=btn[cpt_btn].src_over;
}
function action_onmouseout(e)
{ var cnt=0;
// Avec l'objet évènement récupéré dans 'e', on recherche le bouton concerné
while (e.target!=btn1[cnt]) cnt++;
// 'cnt' contient le numéro du bouton, on peut y aller
btn1[cpt_btn].src=btn[cpt_btn].src_out;
}
function action_onclick(e)
{ var cnt=0;
// Avec l'objet évènement récupéré dans 'e', on recherche le bouton concerné
while (e.target!=btn1[cnt]) cnt++;
// 'cnt' contient le numéro du bouton, on peut y aller
document.location=(btn[cnt].cible);
}
var cpt_btn=0;
do{
btn1[cpt_btn]=document.createElement("img");
btn1[cpt_btn].src=btn[cpt_btn].src_out;
btn1[cpt_btn].className=btn[cpt_btn].class_name;
btn1[cpt_btn].alt=btn[cpt_btn].alt;
btn1[cpt_btn].onmouseover=action_onmouseover;
btn1[cpt_btn].onmouseout=action_onmouseout;
btn1[cpt_btn].onclick=action_onclick;
menu.appendChild(btn1[cpt_btn]);
cpt_btn++;
} while (cpt_btn<btn.length);
Cordialement,
el_linwin
Je vous suggère ce code:
function action_onmouseover(e)
{ var cnt=0;
// Avec l'objet évènement récupéré dans 'e', on recherche le bouton concerné
while (e.target!=btn1[cnt]) cnt++;
// 'cnt' contient le numéro du bouton, on peut y aller
btn1[cpt_btn].src=btn[cpt_btn].src_over;
}
function action_onmouseout(e)
{ var cnt=0;
// Avec l'objet évènement récupéré dans 'e', on recherche le bouton concerné
while (e.target!=btn1[cnt]) cnt++;
// 'cnt' contient le numéro du bouton, on peut y aller
btn1[cpt_btn].src=btn[cpt_btn].src_out;
}
function action_onclick(e)
{ var cnt=0;
// Avec l'objet évènement récupéré dans 'e', on recherche le bouton concerné
while (e.target!=btn1[cnt]) cnt++;
// 'cnt' contient le numéro du bouton, on peut y aller
document.location=(btn[cnt].cible);
}
var cpt_btn=0;
do{
btn1[cpt_btn]=document.createElement("img");
btn1[cpt_btn].src=btn[cpt_btn].src_out;
btn1[cpt_btn].className=btn[cpt_btn].class_name;
btn1[cpt_btn].alt=btn[cpt_btn].alt;
btn1[cpt_btn].onmouseover=action_onmouseover;
btn1[cpt_btn].onmouseout=action_onmouseout;
btn1[cpt_btn].onclick=action_onclick;
menu.appendChild(btn1[cpt_btn]);
cpt_btn++;
} while (cpt_btn<btn.length);
Cordialement,
el_linwin
el_linwin
Messages postés
519
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
16 août 2008
90
27 juil. 2008 à 21:29
27 juil. 2008 à 21:29
Bonsoir Ebnou_Ljabal,
En effet, le code que je propose n'est compatible qu'avec Netscape/Mozilla/Opera...
Voici la version 100% compatible (du moins, je l'espère):
function action_onmouseover(e)
{ var cnt=0;
if (!e) var e=window.event;
// Avec l'objet évènement récupéré dans 'e', on recherche le bouton concerné
if (e.target) code=e.target; else if (e.srcElement) code=e.srcElement;
while (code.target!=btn1[cnt]) cnt++;
// 'cnt' contient le numéro du bouton, on peut y aller
btn1[cnt].src=btn[cnt].src_over;
}
function action_onmouseout(e)
{ var cnt=0;
if (!e) var e=window.event;
// Avec l'objet évènement récupéré dans 'e', on recherche le bouton concerné
if (e.target) code=e.target; else if (e.srcElement) code=e.srcElement;
while (code.target!=btn1[cnt]) cnt++;
// 'cnt' contient le numéro du bouton, on peut y aller
btn1[cnt].src=btn[cnt].src_out;
}
function action_onclick(e)
{ var cnt=0;
if (!e) var e=window.event;
// Avec l'objet évènement récupéré dans 'e', on recherche le bouton concerné
if (e.target) code=e.target; else if (e.srcElement) code=e.srcElement;
while (code.target!=btn1[cnt]) cnt++;
// 'cnt' contient le numéro du bouton, on peut y aller
document.location=(btn[cnt].cible);
}
var cpt_btn=0;
do{
btn1[cpt_btn]=document.createElement("img");
btn1[cpt_btn].src=btn[cpt_btn].src_out;
btn1[cpt_btn].className=btn[cpt_btn].class_name;
btn1[cpt_btn].alt=btn[cpt_btn].alt;
btn1[cpt_btn].onmouseover=action_onmouseover;
if (btn1[cpt_btn].captureEvents) btn1[cpt_btn].captureEvents(Event.MouseOver);
btn1[cpt_btn].onmouseout=action_onmouseout;
if (btn1[cpt_btn].captureEvents) btn1[cpt_btn].captureEvents(Event.MouseOut);
btn1[cpt_btn].onclick=action_onclick;
if (btn1[cpt_btn].captureEvents) btn1[cpt_btn].captureEvents(Event.Click);
menu.appendChild(btn1[cpt_btn]);
cpt_btn++;
} while (cpt_btn<btn.length);
Cordialement,
el_linwin
En effet, le code que je propose n'est compatible qu'avec Netscape/Mozilla/Opera...
Voici la version 100% compatible (du moins, je l'espère):
function action_onmouseover(e)
{ var cnt=0;
if (!e) var e=window.event;
// Avec l'objet évènement récupéré dans 'e', on recherche le bouton concerné
if (e.target) code=e.target; else if (e.srcElement) code=e.srcElement;
while (code.target!=btn1[cnt]) cnt++;
// 'cnt' contient le numéro du bouton, on peut y aller
btn1[cnt].src=btn[cnt].src_over;
}
function action_onmouseout(e)
{ var cnt=0;
if (!e) var e=window.event;
// Avec l'objet évènement récupéré dans 'e', on recherche le bouton concerné
if (e.target) code=e.target; else if (e.srcElement) code=e.srcElement;
while (code.target!=btn1[cnt]) cnt++;
// 'cnt' contient le numéro du bouton, on peut y aller
btn1[cnt].src=btn[cnt].src_out;
}
function action_onclick(e)
{ var cnt=0;
if (!e) var e=window.event;
// Avec l'objet évènement récupéré dans 'e', on recherche le bouton concerné
if (e.target) code=e.target; else if (e.srcElement) code=e.srcElement;
while (code.target!=btn1[cnt]) cnt++;
// 'cnt' contient le numéro du bouton, on peut y aller
document.location=(btn[cnt].cible);
}
var cpt_btn=0;
do{
btn1[cpt_btn]=document.createElement("img");
btn1[cpt_btn].src=btn[cpt_btn].src_out;
btn1[cpt_btn].className=btn[cpt_btn].class_name;
btn1[cpt_btn].alt=btn[cpt_btn].alt;
btn1[cpt_btn].onmouseover=action_onmouseover;
if (btn1[cpt_btn].captureEvents) btn1[cpt_btn].captureEvents(Event.MouseOver);
btn1[cpt_btn].onmouseout=action_onmouseout;
if (btn1[cpt_btn].captureEvents) btn1[cpt_btn].captureEvents(Event.MouseOut);
btn1[cpt_btn].onclick=action_onclick;
if (btn1[cpt_btn].captureEvents) btn1[cpt_btn].captureEvents(Event.Click);
menu.appendChild(btn1[cpt_btn]);
cpt_btn++;
} while (cpt_btn<btn.length);
Cordialement,
el_linwin
Ebnou_Ljabal
Messages postés
18
Date d'inscription
dimanche 27 juillet 2008
Statut
Membre
Dernière intervention
27 septembre 2008
6
27 juil. 2008 à 23:59
27 juil. 2008 à 23:59
Bonsoir,
Votre aide m'a était très utile.
Avec quelques petites modifications mon menu fonctionne très bien dans IE et gecko.
Je tiens à vous remercier infiniment.
Ebnou_Ljabal (Le montagnard)
Votre aide m'a était très utile.
Avec quelques petites modifications mon menu fonctionne très bien dans IE et gecko.
Je tiens à vous remercier infiniment.
Ebnou_Ljabal (Le montagnard)
el_linwin
Messages postés
519
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
16 août 2008
90
27 juil. 2008 à 14:20
27 juil. 2008 à 14:20
Bonjour Ebou_Ljabal,
Essayez dans votre boucle de formuler le code ainsi:
btn1[cpt_btn].onmouseover=function (){btn1[cpt_btn].src=btn[cpt_btn].src_over;}
btn1[cpt_btn].onmouseout=function (){btn1[cpt_btn].src=btn[cpt_btn].src_out;}
btn1[cpt_btn].onclick=function (){document.location=(btn[cpt_btn].cible);}
Cordialement,
el_linwin
Essayez dans votre boucle de formuler le code ainsi:
btn1[cpt_btn].onmouseover=function (){btn1[cpt_btn].src=btn[cpt_btn].src_over;}
btn1[cpt_btn].onmouseout=function (){btn1[cpt_btn].src=btn[cpt_btn].src_out;}
btn1[cpt_btn].onclick=function (){document.location=(btn[cpt_btn].cible);}
Cordialement,
el_linwin
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ebnou_Ljabal
Messages postés
18
Date d'inscription
dimanche 27 juillet 2008
Statut
Membre
Dernière intervention
27 septembre 2008
6
27 juil. 2008 à 14:45
27 juil. 2008 à 14:45
Merci el_linwin.
En effet, c'est ce que j'ai utilisé en premier lieu(function() sans argument). Mais le résultat est le même. Et c'est après que j'ai introduis cpt_btn lors de l'appel de la fonction anonyme.
En effet, c'est ce que j'ai utilisé en premier lieu(function() sans argument). Mais le résultat est le même. Et c'est après que j'ai introduis cpt_btn lors de l'appel de la fonction anonyme.
Ebnou_Ljabal
Messages postés
18
Date d'inscription
dimanche 27 juillet 2008
Statut
Membre
Dernière intervention
27 septembre 2008
6
27 juil. 2008 à 14:53
27 juil. 2008 à 14:53
Une petite précision, c'est juste les lignes :
qui ne marchent pas. Les autres instructions fonctionnent bien.
btn1[cpt_btn].onmouseover=function (){btn1[cpt_btn].src=btn[cpt_btn].src_over;} btn1[cpt_btn].onmouseout=function (){btn1[cpt_btn].src=btn[cpt_btn].src_out;} btn1[cpt_btn].onclick=function (){document.location=(btn[cpt_btn].cible);}
qui ne marchent pas. Les autres instructions fonctionnent bien.
Ebnou_Ljabal
Messages postés
18
Date d'inscription
dimanche 27 juillet 2008
Statut
Membre
Dernière intervention
27 septembre 2008
6
27 juil. 2008 à 16:07
27 juil. 2008 à 16:07
J'ai bien compris.
Maintenant, comment dois-je faire pour que ça fonctionne??
Maintenant, comment dois-je faire pour que ça fonctionne??
Ebnou_Ljabal
Messages postés
18
Date d'inscription
dimanche 27 juillet 2008
Statut
Membre
Dernière intervention
27 septembre 2008
6
27 juil. 2008 à 20:57
27 juil. 2008 à 20:57
Merci Beaucoup el_linwin,
Votre code fonctionne bien dans FireFox.
Sauf que dans IE donne le message 'target' a la valeur Null ou n'est pas un objet.
Votre code fonctionne bien dans FireFox.
Sauf que dans IE donne le message 'target' a la valeur Null ou n'est pas un objet.
Ebnou_Ljabal
Messages postés
18
Date d'inscription
dimanche 27 juillet 2008
Statut
Membre
Dernière intervention
27 septembre 2008
6
27 juil. 2008 à 22:35
27 juil. 2008 à 22:35
Bonsoir el_linwin,
ça marche !!
Merci infiniment. Que de temps gagné.
Heureusement que vous êtes là
ça marche !!
Merci infiniment. Que de temps gagné.
Heureusement que vous êtes là