Onclick sur fenêtre mère

cs_kakoo Messages postés 27 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 7 février 2009 - 8 févr. 2008 à 14:22
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 11 févr. 2008 à 21:27
Bonjour,

J'ai un problème qui m'enquiquine depuis 2 jours...je m'explique :
Depuis ma fenêtre principale, j'ouvre une fenêtre fille sur des liens par window.open, depuis un tableau
Dans cette fenêtre fille, j'effectue quelques opérations et je modifie une seule partie de la fenêtre mère, afin de mettre à jour ce tableau (encadré par des
), tableau dans le lequel il y a ces liens, également mis à jour, et appeleront la fenêtre fille, et ainsi de suite.

Le problème est que je génère le tableau par un script qui est le suivant sur la fenêtre mère
var myid = document.getElementById("detpdti");
myid.innerHTML = '';
mytable = document.createElement("TABLE");
mytablebody = document.createElement("tbody");
mycurrent_header = document.createElement("th");
currentth = document.createTextNode("Code");
mycurrent_header.appendChild(currentth);
mytablebody.appendChild(mycurrent_header);
...
...
mycurrent_cell = document.createElement("td");
mycurrent_link = document.createElement("a");
mycurrent_link.setAttribute("href", "javascript:;");
mycurrent_link.onclick = function() {window.open('pdti_maj.php?td=edit&ci=I070000009&ca=A1','fs','top=262, left=290, width=700, height=500, status=no,scrollbars=no,menubar=no,statusbar=no,location=no,locationbar=no');};
mycurrent_img = document.createElement("img");
mycurrent_img.setAttribute("src", "../img/edit.png");
mycurrent_img.setAttribute("title", "Modifier la ligne article");
mycurrent_img.setAttribute("border", "0");
mycurrent_img.setAttribute("align", "absmiddle");
mycurrent_link.appendChild(mycurrent_img);
mycurrent_cell.appendChild(mycurrent_link);
....
etc

Et le suivant depuis la fenêtre fille :
var myid = window.opener.document.getElementById("detpdti");
myid.innerHTML = '';
mytable = window.opener.document.createElement("TABLE");
mytablebody = window.opener.document.createElement("tbody");
mycurrent_header = window.opener.document.createElement("th");
currentth = window.opener.document.createTextNode("Code");
mycurrent_header.appendChild(currentth);
mytablebody.appendChild(mycurrent_header);
...
...
mycurrent_cell = window.opener.document.createElement("td");
mycurrent_link = window.opener.document.createElement("a");
mycurrent_link.setAttribute("href", "javascript:;");
mycurrent_link.onclick = function() {window.open('pdti_maj.php?td=edit&ci=I070000009&ca=A1','fs','top=262, left=290, width=700, height=500, status=no,scrollbars=no,menubar=no,statusbar=no,location=no,locationbar=no');};
mycurrent_img = window.opener.document.createElement("img");
mycurrent_img.setAttribute("src", "../img/edit.png");
mycurrent_img.setAttribute("title", "Modifier la ligne article");
mycurrent_img.setAttribute("border", "0");
mycurrent_img.setAttribute("align", "absmiddle");
mycurrent_link.appendChild(mycurrent_img);
mycurrent_cell.appendChild(mycurrent_link);
...
...
Bien évidemment, lorsque cette mise à jour est terminée, je ferme la fenêtre fille...et les liens "onclick" ne fonctionnent plus puisqu'à priori Javascript considère que l'appelant du window.open est cette fenêtre fille et non pas la fenêtre mère.

J'ai pensé à complètement reconstruire mon tableau avec du code html injecté par innerHTML, mais je trouve pas ça "très propre".

Auriez-vous une idée car je sèche complètement

Merci d'avance.

7 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
8 févr. 2008 à 16:47
Bonjour,
pourquoi faire deux fonctions une dans la fenêtre mère et une dans la fenêtre fille, il serait plus simple d'appeler de la fenêtre fille la fonction de la fenêtre mère
window.opener.Nom_Fonction()
;O)
0
cs_kakoo Messages postés 27 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 7 février 2009
8 févr. 2008 à 18:06
Bonsoir,

Ca j'y avais pensé, mais le problème est que comme le tableau est entièrement dynamique (généré en fonction de la présence ou non de certains enregistrements), je dois d'abord mettre à jour le script sur la fenêtre mère pour qu'il me réaffiche à chaque fois complètement toutes les lignes (les ajouts ou sans ceux supprimées).

Si je lance le script de la fenêtre mère, je régénère le tableau d'origine et pas celui modifié...

Merci
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
11 févr. 2008 à 17:57
Bonjour,
J'ai un peu de mal à bien comprendre mais as tu essayé de supprimer le window de window.open (...
Just for test...
Si tu avais un lien pour bien ce rendre compte du problème.
;O)
0
cs_kakoo Messages postés 27 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 7 février 2009
11 févr. 2008 à 18:18
Je vais essayer d'être plus clair...

Je génère un tableau par un script javascript depuis une page html (jusque là, tout va bien).

Sur ce tableau, il y a des liens qui ouvrent une fenêtre fille dans laquelle je vais effectuer des calculs, à la suite desquels un script Javascript (lancé depuis la fenête fille) va recréer le tableau dans la fenêtre mère (inclus les liens) , puis refermer cette fenêtre fille.

Le problème est que le "mycurrent_link.onclick" généré depuis la fenête fille, dans le tableau de la fenêtre mère, et qui lancera une commande "window.open" semble (et c'est à priori normal) se référer à la fenêtre fille...qui est refermée.

Du coup, quand on clique sur le lien concerné par le "mycurrent_link.onclick", il y a une erreure javascript puisque le référent (la fenêtre fille) n'existe plus.

C'est plus clair, là ?

PS : je n'ai pas de lien, désolé
0

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

Posez votre question
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
11 févr. 2008 à 19:33
Effectivement,
Vu après constitution d'un exemple, il semble que les function anonyme garde la ref window sous forme d'adresse et non de "texte"...
Il te faut mettre  function() {window.opener.open(...
;O)
0
cs_kakoo Messages postés 27 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 7 février 2009
11 févr. 2008 à 20:07
Bonsoir,

Et à ton avis, le fait que la fenêtre "créatrice" du tableau, à savoir la fenêtre fille, ait disparu (car refermée) et que le lien "window.opener.open" soit sur la fenêtre mère, ça va fonctionner ?

Là, j'ai un doute...
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
11 févr. 2008 à 21:27
Aucune garanti les navigateurs n'ayant pas la même façon de gérer cela, pour preuve test sous FireFox -> OK sous IE -> NOK.
Une solution consisterait peut être à créer une fonction dans la page mére et de l'affecter au onclick...
;O)
0
Rejoignez-nous