modifier valeur select fenetre parente

Mammouth du PHP | 514 Messages

20 mai 2008, 10:22

Bonjour,

J'ai un petit bug sous IE / javascript (fallait s'y attendre ...)

Je n'arrive pas à le corriger.

But :

j'appelle une popup permettant des saisies à l'utilisateur, et je tente d'écrire le résultat des saisies dans un champ select de la fenêtre parente.

Le select est bien détecté, mais l'écriture ne fonctionne pas :

Code : Tout sélectionner

var objSelect = window.opener.document.getElementById('secretaire'); var dcm = document.createElement('option'); dcm.text = 'test'; dcm.value = 10; try { objSelect.add(dcm, null); // standards compliant alert('ff'); } catch(ex) { objSelect.add(dcm); // IE only alert('ie'); } window.top.close();
Aucune erreur attrapée, mes alert js ne renvoient rien ... J'ai essayé pas mal de choses, j'avoue être dépassé.

Merci de votre aide.

Mammouth du PHP | 19672 Messages

20 mai 2008, 10:58

Au lieu de la méthode add, utilise plutôt appendChild:

Code : Tout sélectionner

objSelect.appendChild(dcm);
et tu n'as plus besoin du try/catch. Si tu as besoin de connaître le navigateur, utilise une fonction à part basée sur l'objet natif Navigator, ce sera plus efficace à mon avis.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 514 Messages

20 mai 2008, 11:02

C'est un peu contraire à tout ce que préconisent les autres sites, pourtant ... De ce que j'en ai lu, ils disent d'utiliser la méthode add, qui est native et faite pour ça.

Je vais néanmoins tenter avec appendChild, on verra.

Edit : Testé avec la méthode appendChild, ça fonctionne toujours sous firefox, mais pas sous IE. Il doit y avoir quelque chose avec la fenêtre parente, mais je ne sais pas quoi ...

Edit (2) :

J'ai tenté quelques modifs, en ajoutant notamment un textarea, et en modifiant sa valeur depuis la popup, ça tourne. Le code :

Code : Tout sélectionner

<script type="text/javascript"> var testArea = window.opener.document.getElementById('test'); testArea.value = 'champ modifie'; var objSelect = window.opener.document.getElementById('secretaire'); var dcm = document.createElement('option'); dcm.text = 'corgnet corgnet'; dcm.value = 60; objSelect.add(dcm); // IE only try { objSelect.add(dcm, null); // standards compliant alert('ff'); } catch(ex) { objSelect.add(dcm); // IE only alert('ie'); } window.top.close(); </script>
Par contre, pour le select, ça ne fonctionne toujours pas ...

Edit (3) :

Après beaucoup de recherches, la réponse se trouve ici :

http://forum.hardware.fr/hfr/Programmat ... 2673_1.htm

Il faut appeler une fonction située sur la fenêtre mère, pas la fenêtre enfant. Et ça tourne.

Merci à vous.