Page 1 sur 1

modifier valeur select fenetre parente

Posté : 20 mai 2008, 10:22
par mcorgnet
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.

Posté : 20 mai 2008, 10:58
par Cyrano
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.

Posté : 20 mai 2008, 11:02
par mcorgnet
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.