IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[Abandonné] Passage de variable dynamique dans un window.opener


Sujet :

JavaScript

  1. #1
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 719
    Points
    1 719
    Par défaut [Résolu] Passage de variable dynamique dans un window.opener
    Bonjour,

    Je cherche à passer une variable dans un window.opener. Le contexte : j'ai plusieurs pages qui appellent une popup unique, et celle-ci renvoie une variable en fonction de la page appelante.

    Voici ce que j'ai pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <script language="JavaScript" type="text/javascript">
    	var page = String(window.opener.document.title); // on récupère le nom de la page appelante
    	//DEBUG : 
    	//alert("Page : " + page);
    	if (page == 'New Action')
    	{
    		var champ = 'action_date';
    		alert("window.opener.document.forms[0]." + champ + ".type = \"text\";");
    		alert("window.opener.document.forms[0]." + champ + ".value = \"<?php echo $date; ?>\";");
    	}
    	else if (page == 'IRD')
    	{
    		var champ = 'activiteDate';
    		alert("window.opener.document.forms[0]." + champ + ".type = \"text\";");
    		alert("window.opener.document.forms[0]." + champ + ".value = \"<?php echo $date; ?>\";");
    	}
     
    	window.opener.focus();
    </script>
    L'alert() affiche bien les lignes window.opener..., les valeurs sont correctes, que ce soit le javascript ou le php.

    Seulement je ne sais pas comment les exécuter, quelle est la syntaxe pour afficher mon champ (ici en rouge) :
    window.opener.document.forms[0].champ.type = "text";

    J'ai aussi essayé avec un :
    document.write("window.opener.document.forms[0]." + champ + ".type = \"text\";");
    mais forcément cela m'écrit la commande dans la popup.

    Je suis plutôt débutant en JS, je ne sais pas si c'est possible de faire passer cette variable, et si oui comment.

    Merci d'avance pour votre aide

    Edit 27/10 : résolu
    Il fallait mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.opener.document.getElementById(sourceI).value = "<?php echo $date; ?>";
    Merci à Florent d'HFR

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Une petite recherche t'aurais certainement permis de trouver ce lien.

  3. #3
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 719
    Points
    1 719
    Par défaut
    Oui désolé, j'avais vu ce lien (et d'autres) par Google, mais je n'avais pas compris les explications, d'où ma demande d'aide...

    En revanche je viens d'en trouver un qui répond à ma question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    window.opener.document.forms[0][champ].type = "text";
    Cela fonctionne parfaitement

    Merci Bovino et désolé du doublon

  4. #4
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 719
    Points
    1 719
    Par défaut
    Je suis de nouveau bloqué depuis tout-à-l'heure... Je ne parviens pas à récupérer le nom de l'input de la page appelante (ce que j'ai mis en premier message ne fait finalement pas l'affaire).

    Voilà les 2 pages appelantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="button" name="action_date" id="action_date" value="calendar" onClick="ouvrirPopup2('../calendrier/calendar.php', 'calendrier', 170, 170, 685, 200)"/>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name='activiteDate' id='activiteDate<?php echo $i; ?>' title='Click to modify'  value = '<?php echo dateFr($dateObjectif); ?>' onClick='ouvrirPopup2("../calendrier/calendar.php", "calendrier", 170, 170, 550, 100);' >
    Cela fait 2h que je cherche, de partout il est indiqué d'utiliser getElementsByName ou getElementsById, et rien de ce que je teste ne fonctionne...

    Je voudrais récupérer le name, qui est toujours fixe, pour identifier la page d'origine, pour ensuite pouvoir l'actualiser.

    Un petit conseil ?

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.opener.document.forms[0][champ].type = "text";
    Tu cherches à modifier le type de ton input ???

    Sinon,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.opener.document.forms[0].elements[champ];
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.opener.document.getElementById(champ);
    il est indiqué d'utiliser getElementsByName ou getElementsById
    Attention, c'est getElementById (sans s, car l'id doit être unique dans la page !

  6. #6
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 719
    Points
    1 719
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Tu cherches à modifier le type de ton input ???
    Oui, l'input du premier code est un bouton

    Citation Envoyé par Bovino Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.opener.document.forms[0].elements[champ];
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.opener.document.getElementById(champ);
    C'est bien ce que j'ai lu ailleurs, mais cela ne fonctionne pas, il me manque un truc pour piger ce fonctionnement : le getElementById récupère la valeur de l'id et le getElementByName récupère le name, c'est bien ça ? Si oui dans mon cas je ne peux faire qu'avec le name puisque l'id est dynamique. Donc pour mes tests j'ai mis activiteDate A la place de champ, qui est l'attribut name de mon input. Ce n'est pas lui qu'il faut indiquer ?

    J'ai mis pour vérifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var name = window.opener.document.getElementById(activiteDate);
    alert(name);
    Mais je n'ai aucun retour...

    Merci pour ton aide !

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('id')
    Le paramètre est une chaine ou une variable de type chaine, la fonction te renvoie l'élément en question (s'il existe !)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByName('name')
    Même remarque pour le paramètre, la fonction renvoie une collection d'éléments auxquels tu accèdes par leur numéro d'odre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByName('name')[0]

  8. #8
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 719
    Points
    1 719
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var name = window.opener.document.getElementsByName('activiteDate')[0];
    alert(name);
    me renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [object HTMLInputElement]
    Pourtant cela semble correct puisque si j'ajoute .value à la fin, j'ai "Click to add a date" qui est bien la value de mon input. C'est moi qui suis un boulet ou bien ?

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    la fonction renvoie une collection d'éléments
    Donc l'indice 0 te renvoie un élément
    [object HTMLInputElement]
    est bien un objet élément !
    Si tu veux l'id par exemple, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var name = window.opener.document.getElementsByName('activiteDate')[0].id;

  10. #10
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 719
    Points
    1 719
    Par défaut
    Ok ça marche, je commence à comprendre

    Le souci maintenant c'est d'avoir un paramètre commun aux 2 pages appelantes : var name = window.opener.document.getElementsByName('activiteDate')[0].name; foncitonne mais uniquement pour une des deux pages. Je ne peux pas changer le name ni l'id car ils sont utilisés ailleurs, je reprend le code donc je ne sais pas encore ce que ça impacterait de le changer. Sans paramètre commun, j'ai donc fait :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if ( window.opener.document.getElementsByName('activiteDate')[0].name ) {
    	alert ("activite");
    }
    if ( window.opener.document.getElementsByName('action_date')[0].name ) {
    	alert ("action");
    }
    Seul le premier if renvoie l'alert(). Par contre, si je les change d'ordre, c'est le nouveau premier qui le renvoie et pas celui qui fonctionne dans le premier cas ! Comme si le premier if empêchait le 2e de s'exécuter... Je me trompe de syntaxe ? (if - else if a le même effet)

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ben moi, ce que je comprends pas, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var name = window.opener.document.getElementsByName('activiteDate')[0].name;
    Tu récupères le name d'un élément sélectionné par son name...
    autant faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var name = 'activiteDate';

    En revanche, je ne saisis pas trop ce que tu cherches à faire...

  12. #12
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 719
    Points
    1 719
    Par défaut
    J'essaye de faire simple :

    J'ai 2 pages : page A et page B

    page A a ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="action_date" id="action_date" value="calendar" onClick="ouvrirPopup2('../calendrier/calendar.php', 'calendrier', 170, 170, 685, 200)"/>
    pageB a ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name='activiteDate' id='activiteDate<?php echo $i; ?>' title='Click to modify'  value = '<?php echo dateFr($dateObjectif); ?>' onClick='ouvrirPopup2("../calendrier/calendar.php", "calendrier", 170, 170, 550, 100);' >
    Elles ouvrent toutes les deux une popup de calendrier. Le but de la manoeuvre est de remplir les input avec une date renvoyée par la popup.

    Problème : elles n'ont pas d'élément en commun (un attribut name ou un id). Je cherche donc à savoir quelle est la page qui a appelé le calendrier, de façon à renvoyer la date sur le bon input (si je renvoie une date sur B en ciblant l'input de A, cela ne fonctionnera pas).
    Contrainte : je ne peux pas toucher au code de ces deux pages, je dois tout faire sur la page du calendrier.

    Mon but dans ce code était de déterminer quelle était la page appelante, avec l'attribut "name" : L'attribut "id" étant dynamique pour la page B, cela complique les choses. C'est cela que je n'arrive pas à faire. Je suis preneur de toute solution tant qu'elle est facile à comprendre (noob inside).

    J'espère que c'est plus clair ?

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Et tu ne peux pas dans ouvrirPopup2 rajouter un paramètre (this.id par exemple) pour repérer facilement l'élément déclencheur ?

  14. #14
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 719
    Points
    1 719
    Par défaut
    Non puisque cela implique de modifier les 2 pages. Je sais c'est idiot mais c'est la consigne

  15. #15
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 719
    Points
    1 719
    Par défaut
    Ceci dit il me semble que les if (#10) devraient fonctionner, c'est la seule solution que j'ai trouvé, mais je ne pige pas pourquoi le premier bloque le second..

  16. #16
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 719
    Points
    1 719
    Par défaut
    Bonjour,

    J'ai réussi à convaincre de modifier le code des 2 pages Seulement moi et le JS ça fait toujours 3, et je bloque sur quelque chose d'a priori très simple...

    J'ai donc cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function ouvrirCalendrier(url, name, hauteur, largeur, gauche, haut, source) {
    	var popup = window.open(url, name, "directories = no, status = no, menubar = no, scrollbars = yes, location = no, resizable = yes, height = "+  hauteur +", width = "+ largeur +", left = "+ gauche +", top = "+ haut +", fullscreen = no", source);
    	popup.focus();
    	return popup;
    }
    La popup s'ouvre bien, mais je ne sais pas comment récupérer la valeur de 'source' : les paramètres servent à l'ouverture de la page, ensuite c'est possible de les traiter ?



    Edit : quelques précisions : Bovino a écrit ci-dessus "this.id". J'ai essayé "this.name", cela me renvoie "calendrier", c'est bien le paramètre passé dans la fonction. Alors pourquoi "this.source" me renvoie undefined ?


    Edit 27/10 : résolu, voir post #1

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/03/2010, 18h58
  2. Afficher une variable dynamique dans la barre des taches de windows
    Par mustang-ffw02 dans le forum Windows Forms
    Réponses: 16
    Dernier message: 27/05/2007, 23h24
  3. Réponses: 4
    Dernier message: 19/05/2006, 14h30
  4. Enregistrement d'une variable dynamique dans un fichier
    Par zarbydigital dans le forum Langage
    Réponses: 13
    Dernier message: 24/12/2005, 21h28
  5. variable dynamique dans une fonction javascript
    Par Shivaneth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2005, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo