Affectation d'un fonction pour un evenement pour IE et FF?

Résolu
dudulebzh35 Messages postés 23 Date d'inscription mardi 23 novembre 2004 Statut Membre Dernière intervention 8 juin 2009 - 9 juil. 2008 à 10:35
cs_bultez Messages postés 13615 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.

10 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
9 juil. 2008 à 13:08
ai-je percuté ?

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

quelques explications ici

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
3
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
9 juil. 2008 à 10:55
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]
0
dudulebzh35 Messages postés 23 Date d'inscription mardi 23 novembre 2004 Statut Membre Dernière intervention 8 juin 2009
9 juil. 2008 à 11:35
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.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
9 juil. 2008 à 12:11
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]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dudulebzh35 Messages postés 23 Date d'inscription mardi 23 novembre 2004 Statut Membre Dernière intervention 8 juin 2009
9 juil. 2008 à 12:23
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.
0
XtremDuke Messages postés 626 Date d'inscription samedi 28 septembre 2002 Statut Membre Dernière intervention 18 mai 2009 4
9 juil. 2008 à 13:56
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)











;









???
0
dudulebzh35 Messages postés 23 Date d'inscription mardi 23 novembre 2004 Statut Membre Dernière intervention 8 juin 2009
9 juil. 2008 à 14:02
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.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
9 juil. 2008 à 14:04
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]
0
dudulebzh35 Messages postés 23 Date d'inscription mardi 23 novembre 2004 Statut Membre Dernière intervention 8 juin 2009
9 juil. 2008 à 14:08
Oui c'est ce que j'ai fait aussi ...
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
9 juil. 2008 à 14:33
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]
0
Rejoignez-nous