Affectation d'un fonction pour un evenement pour IE et FF? [Résolu]

Messages postés
23
Date d'inscription
mardi 23 novembre 2004
Statut
Membre
Dernière intervention
8 juin 2009
- - Dernière réponse : cs_bultez
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
- 9 juil. 2008 à 14:33
Bonjour a tous,

J'ai une liste avec le nom de fichiers et de repertoires (dans une table). Lorsque je clique sur un repertoire, je vois ses fichiers, jusque la rien d'exceptionnel mais j'ai un problème lorsque je veux recréer ma nouvelle liste avec les nouveaux fichiers, j'arrive pas a redéfinir correctement mes evenements.
Un ptit bout de code (?)
Lorque je double clique sur un repertoire : (version allégée)
function

Row_OnDoubleClick(obj) {

  if (!obj) obj =
this; // explication de cette ligne + bas

  var chaine =
"../../Ajax/Default.aspx?folder=" + escape(folder);

  var ajax =
new oAjax(chaine);

  var text = ajax.CallBackRequest();

  CreateRows(text);

}

Petite explication, dans la page html j'ai mis comme evenement pour le double clique de ma ligne :
maligne.ondblclick = "Row_OnDoubleClick(this);"

Donc quand je recréé ma liste, je commence par supprimer mes lignes de ma table :
function
DeleteRows() {

   if (tabFile) {

      for (i = tabFile.rows.length - 1; i > 0 ; i --) {
            tabFile.deleteRow(i); 
      }
   }
}
Ensuite je créé mes nouvelles lignes :
function

AddRows(isfolder, filename, size, i) {

   if (tabFile) {

      var row = tabFile.insertRow(i);
      
var c1 = row.insertCell(0);

      var img = document.createElement(
"IMG");
      
if (isfolder == 0) {
         row.setAttribute(
'isfolder',
'True');   
         img.src =
"../../Images/folder.png";
      }

      else {
         row.setAttribute(
'isfolder',
'False');
         img.src =
"../../Images//file.bmp";
      }
      c1.appendChild(img);

      var c2 = row.insertCell(1);
      c2.innerHTML = filename;

      var c3 = row.insertCell(2);

      if (size > -1) c3.innerHTML = size;

      
      if (!pair(i)) row.className =
"RowImpair";

      else row.className =
"RowPair";

     row.onmouseover = Row_OnMouseOver;
      row.onmouseout = Row_OnMouseOut;
      row.ondblclick = Row_OnDoubleClick;
      row.onclick = Row_OnClick;
   }
}

J'ai mis ce qui pose probleme en rouge. Donc sous IE, j'ai dû redéfinir la variable "obj" en fesant if (!obj) obj =
this; (voir + haut) et sous FF il me dit que obj et du type mouseEvent, alors comment faire pour définir une fonction a une ligne (par exemple) avec comme parametre soit meme.

J'espere avoir assez clair, sinon je vous fait confiance pour me le dire...
merci d'avance
Kenavo.
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
27
3
Merci
ai-je percuté ?

élément.onclick=function() { MaFonction(this);    };

quelques explications ici

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 197 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_bultez
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
27
0
Merci
Bonjour,
si j'ai bien compris tu veux récupérer le n° de ligne dans la fonction ?

soit :
        row.num=i;
      row.onclick = function() { alert(this.num); }
soit :
        row.onclick=function(index)
            {     return function()
                { alert(index);};
            }    (i);               
       

et je me garderai bien de te dire quelle est la meilleure !

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
23
Date d'inscription
mardi 23 novembre 2004
Statut
Membre
Dernière intervention
8 juin 2009
0
Merci
re,

Je voudrais affecter au clique de ma ligne une fonction déjà défini et qui a comme parametre soit meme.
function MaFonction(obj) {
// obj represente this.
}

maligne.onclick = MaFonction;

(j'espere que la syntaxe est correcte?)

le probleme est qu'avec IE, je suis obligé dans la fonction de faire :
if(!obj) obj = this;
et avec FF, this represente l'objet eventMouse.
Comment faire pour affecter une fonction avec comme parametre soit meme.
Commenter la réponse de dudulebzh35
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
27
0
Merci
tu veux appeler une fonction avec en paramètre elle-même ?
     pas compris... navré.    enfin, le but au moins...
tu veux récupérer l'évênement qui a provoqué la fonction ? c'est ça ?
   
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
23
Date d'inscription
mardi 23 novembre 2004
Statut
Membre
Dernière intervention
8 juin 2009
0
Merci
Je genere les lignes de ma table en vb.net et je met dans l'evenement onclick=maFonction(this);
comme ca dans la fonction, je peux librement utiliser ma ligne.




function




MaFonction(obj) {
   obj.cells[0]....
}

Et quand je clique sur une ligne j'efface mes lignes pour en créer d'autres. Donc je les créer en javascript et j'ai besoin d'affecter au click sur la nouvelle ligne le meme evenement que j'ai generé en vb.
donc pour ce faire je fait :
maligne.onclick = MaFonction;

j'aimerai faire un truc du genre :
maligne.onclick = MaFonction(maligne);
mais comme ca, ca n'existe pas. est ce possible ? ou si vous avez une autre solution, je suis preneur.
Commenter la réponse de dudulebzh35
Messages postés
631
Date d'inscription
samedi 28 septembre 2002
Statut
Membre
Dernière intervention
18 mai 2009
3
0
Merci
j'aimerai faire un truc du genre :
maligne.onclick = MaFonction(maligne);
mais comme ca, ca n'existe pas



Je ne comprends pas ton problème :













row.onmouseover = Row_OnMouseOver(row);
row.onmouseout = Row_OnMouseOut











(row)











;
row.ondblclick = Row_OnDoubleClick











(row)











;
row.onclick = Row_OnClick











(row)











;









???
Commenter la réponse de XtremDuke
Messages postés
23
Date d'inscription
mardi 23 novembre 2004
Statut
Membre
Dernière intervention
8 juin 2009
0
Merci
XtrmDuke tu as essayé ce que tu as mis ? si ca fonctionne tu as plus de chance que moi.

Sinon Bultez tu as parfaitement percuté, c'est tout a fait ca, j'avais regardé le totorial mais je suis passé un peu a coté
Merci.
Commenter la réponse de dudulebzh35
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
27
0
Merci
et bein.. ça ça baigne :
                     row.onclick=function() { MaFonction(this);    };
même principe pour les autres évênements
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez
Messages postés
23
Date d'inscription
mardi 23 novembre 2004
Statut
Membre
Dernière intervention
8 juin 2009
0
Merci
Oui c'est ce que j'ai fait aussi ...
Commenter la réponse de dudulebzh35
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
27
0
Merci
on s'est croisés... je n'avias pas compris que tu avais compris,
et que tu disais que ça baignait....  nickel alors si cela convient et merci du retour.
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Commenter la réponse de cs_bultez