begin process at 2012 05 29 12:48:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Javascript

 > 

Archives

 > 

Débutants

 > 

Lier un événement à une méthode


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Lier un événement à une méthode

jeudi 16 mars 2006 à 16:54:49 | Lier un événement à une méthode

lelutinvert

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" " [ Lien ]">
<html xmlns=" [ Lien ]">
<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>

<body>
<?php
 $nb_volets=5;
 echo '<div id="bm_1" style="position:absolute; left:150px; top:50px; cursor:hand; cursor:pointer;" >';
 for($i=0;$i<$nb_volets;$i++){
  $ht=(80*$i);
  echo '<div id="v_'.$i.'" style="position:absolute; left:0px; top:'.$ht.'px; width:151px; height:51px; padding: 10px; z-index:1; background-color: #CCCC33; layer-background-color: #CCCC33; border: 1px none #000000;">Volet : v_'.$i.'</div>';
 }
 echo '</div>';
?>
<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>
</body>
</html>

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

vendredi 17 mars 2006 à 12:08:43 | Re : Lier un événement à une méthode

lelutinvert

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" " [ Lien ]">
<html xmlns=" [ Lien ]">
<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>

<body>
<?php
 $nb_volets=5;
 echo '<div id="bm_1" style="position:absolute; left:150px; top:50px; cursor:hand; cursor:pointer;" >';
 for($i=0;$i<$nb_volets;$i++){
  $ht=(80*$i);
  echo '<div id="v_'.$i.'" style="position:absolute; left:0px; top:'.$ht.'px; width:151px; height:51px; padding: 10px; z-index:1; background-color: #CCCC33; layer-background-color: #CCCC33; border: 1px none #000000;"';
  echo 'onMouseover ="obj_volet['.$i.'].coord(event);"';
  echo '>Volet : v_'.$i.'</div>';
 }
 echo '</div>';
?>
<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>
</body>
</html>



Cette discussion est classée dans : document, obj, mm, getelementbyid, volet


Répondre à ce message

Sujets en rapport avec ce message

obj.innerHTML [ par fgingat ] Bonjour à tous .. Voila mon premier poste concerne un soucis de comprehension de la methode de fonctionnement de obj.innerHTML  A savoir sur une page Probleme de différence de taille entre IE et Mozilla (etc) [ par chandler_vodkamartini ] Voilou, j'explique la situation, j'ai un scroll javascript qui agit sur une suite d'image et de texte placée dans un container qui a une certaine tail [AIDE]Problème avec un calque et fonction Onmouseover ? [ par masta64 ] Bonjour à tous, voila je débute et je suis entrain de construire mon site perso et je me trouve devant un probléme que je n'arrive pas à regler et ca Redimensionnement de font sur un document.getElementById(obj).innerHTML [ par cousinlol ] Bonsoir,J'ai une fonction impression et je veux redimensionner la taille de la police de ce que j'imprimeJ'ai fait var zi = ""+document.getElementById Problème d'opacité... [ par nicomilville ] Salut,J'utilise la propriété de petoleTeam pour avoir une même opacité sur tout les navigateurs...J'ai un div qui grise la page et qui a une opacié de problème avec removechild() [ par nicomilville ] Salut,J'ai fait une fonction pour afficher les derniers messages et j'ai aussi mis dans cette fonction un évènement click sur un élément mais cette fo Encore des erreurs ! [ par nicomilville ] Salut,Et oui, c'est encore moi, vous devez vous dire que je suis un nul, c'est peut être vrai, lol J'ai encore des erreurs sur mon code... Si ça co [Javascript] Firefox et Opera VS Safari et IE [ par SpoonS2K ] Bonjour, après moultes recherches et avoir tourné le truc dans tout les sens, je m'en remet à vous. Je débute dans le Javascript, et dèja je m'aperçoi Internet Explorer et object [ par bond_never_die ] Bonjour à tous. Voilà, j'ai un petit script qui permet d'afficher dynamiquement une zone d'affichage au dessus de ma page. Problème : sous Internet Ex Document.getElementById(strId3).innerHTML = req; Problème avec IE [ par mlinux ] Bonjour,J'ai un petit script AJAX qui fonctionne avec Firefox et Safari et ne fonctionne pas avec Internet Explorer IE 8 et IE 8.[code]/**************


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales