Lier un événement à une méthode

cs_lelutinvert Messages postés 7 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 10 janvier 2009 - 16 mars 2006 à 16:54
cs_lelutinvert Messages postés 7 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 10 janvier 2009 - 17 mars 2006 à 12:08
Bonjour,
Voilà le problème qui se pose :
J'ai volontairement très simplifié le code dans lequel je rencontre la difficulté, mais le principe s'y trouve.
Un certain nombre de volets dans des calques sont dynamiquement affichés via PHP grâce à une boucle. Les données gérant cet affichage viennent normalement d'un fichier texte externe non détaillé ici car le problème n'est pas là.
Je cherche à utiliser le principe d'une classe pour que chaque volet puisse être géré indépendamment des autres.
D'autre part, je voudrai faire fonctionner le Javascript sous IE version 5 et + et Mozilla version 1.6 et +.
Il y a (volontairement) une erreur dans lee attaches d'événements après les "getElementById" pour exprimer l'idée de ce que je voudrai arriver à faire.
Voici le code complet de mon fichier :

---------------------------------- code pour étude ------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Essai</title>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
<style type="text/css">
<!--
div {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: 500;
color: #000000;
padding: 10px;
}
-->
</style>
</head>



<?php
$nb_volets=5;
echo '
';
for($i=0;$i<$nb_volets;$i++){
$ht=(80*$i);
echo '
Volet : v_'.$i.'
';
}
echo '
';
?>
<script language="javascript" type="text/javascript">
//Détection du navigateur : soit IE, soit NS var msie false, mozi false;
if (document.getElementById && attachEvent) msie = true;
else if (document.getElementById && addEventListener) mozi = true;
//Constructeur de la classe
function obj_untel(v) {
this.v = v;
//Méthode
this.coord = affiche;
alert("objet "+v+" créé");
}
//Un exemple de fonction qui transmet ici une position du pointeur
function affiche(e) {
var _x, _y;
if (msie) { _x event.clientX; _y event.clientY;
} else if (mozi) { _x e.pageX; _y e.pageY;
}
alert("Survol du menu "+this.v+"\n position pointeur : "+_x + " / " +_y);
}
//Création des objets "volets"
var obj_volet = new Array();
function lst_obj(){
alert("Lancement création objet volet");
for(i=0;i< <?php echo $nb_volets; ?>;i++){
obj_volet[i]=new obj_untel("v_"+i);
if (msie) {
//À partir de cre stade, je ne trouve pas comment appeler la méthode coord() dans l'objet obj_volet[i]
document.getElementById("v_"+i).attachEvent("onmouseover",obj_volet[i].coord);
} else if (mozi) {
document.getElementById("v_"+i).addEventListener("mouseover",obj_volet[i].coord,true);
}
}
}
//Initialisation après chargement
if (msie) window.attachEvent("onload",lst_obj);
else if (mozi) window.addEventListener("load",lst_obj,false);
//
</script>

</html>

Merci au "logicien" quiu sait comment faire ou me dire quel tutoriel consulter en réponse.
Lelutinvert.

1 réponse

cs_lelutinvert Messages postés 7 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 10 janvier 2009
17 mars 2006 à 12:08
Bonjour,
Pour faire suite à mon premier message, j'ai trouvé une solution à partir du DOM , reste à savoir si c'est du code propre réutilisable notamment dans son principe avec la gestion des phases de propagation dans le cas entre-autres de calques imbriqués.
Je poursuis mons étude.
Celle-ci fonctionne sous IE et Mozilla, mais je ne saurais pas l'expliquer vraiment dans sa logique. Toutefois, cette solution peut interesser...Et si quelqu'un a une meilleure ou la bonne solution...
Je rapelle qu'il s'agit d'une étude, non du projet réel.
Voici ma dernière mouture :
--------------------------------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Essai menu</title>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
<style type="text/css">
<!--
div {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: 500;
color: #000000;
padding: 10px;
}
-->
</style>
</head>



<?php
$nb_volets=5;
echo '
';
for($i=0;$i<$nb_volets;$i++){
$ht=(80*$i);
echo '
Volet : v_'.$i.'
';
}
echo '
';
?>
<script language="javascript" type="text/javascript">
//Détection du navigateur : soit IE, soit NS var msie false, mozi false;
if (document.getElementById) {
if (window.addEventListener) mozi = true;
else if (window.attachEvent) msie = true;
}
//Constructeur
function obj_untel(v) {
this.v = v;
//Méthode
this.coord = affiche;
alert("objet "+v+" créé");
}
//Un exemple de fonction
function affiche(e) {
var _x, _y;
if (msie) { _x event.offsetX; _y event.offsetY;
} else if (mozi) { _x e.layerX; _y e.layerY;
}
alert("Survol du menu "+this.v+"\n position pointeur : "+_x + " / " +_y);
}
//Création des objets
var obj_volet = new Array();
function lst_obj(){
alert("Lancement création objet volet");
for(i=0;i< <?php echo $nb_volets; ?>;i++){
obj_volet[i]=new obj_untel("v_"+i);
}
}
//Création des objets
//msie ? window.attachEvent("onload",attachEven) : window.addEventListener("load",attachEven,false);
if (msie) window.attachEvent("onload",lst_obj);
else if (mozi) window.addEventListener("load",lst_obj,false);
//
</script>

</html>
0
Rejoignez-nous