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 :

Fermer plusieurs popups avec un seul bouton


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 Fermer plusieurs popups avec un seul bouton
    Bonjour,

    Sur l'intranet en cours de développement nous utilisons un système de popups :
    Page principale ouvre popup A
    A ouvre popup B
    B ouvre popup C

    J'aimerais que depuis la page principale, il soit possible de ferme toutes les autres popups. Apparemment il n'existe pas l'inverse de window.opener pour traiter des popups filles. J'ai essayé un simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type=" button"  value=" close"  onClick=" window.opener.document.form_modifyList.submit(); window.close(); popupA.close(); popupB.close();"  />
    avec à chaque fois le nom de la popup (celui qui est passé en paramètre du windon.open) mais cela ne fonctionne pas. Je n'ai rien trouvé de probant, à part les fermer une à une, ce qui est déjà le cas actuellement mais ce n'est pas pratique...

    Avez-vous une idée pour y arriver ? Merci d'avance pour votre aide !

    #######

    Edit 28/11 : j'ai mis un code simplifié en PJ.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    ce n'est pas le paramètre du open() qu'il faut utiliser, mais un handle défini à l'ouverture.
    Dans Page Principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    popA = window.open(urlA, 'POPA',...);
    dans popA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    popB = window.open(...);
    dans popB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    popC = window.open(...);
    Pour fermer tout ça à partir de Page Principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    popA.popB.popC.close();
    popA.popB.close();
    popA.close();
    L'ordre est à respecter : si tu fermes popB avant popC, la page principale ne peut plus fermer popC (car elle ne la "connait" pas "directement")

    A+

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    j'aurais pushé les popup dans un array ...
    y'aurait plus qu'a poper l'array pour tout fermer ...


    mais le plus simple serait encore de se passer des popups avec window prototype

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    page principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // sur le onclick du bouton
    function closePopup(){
      if (popup && popup.closeWindow){
        popup.closeWindow();
      }
    }
    dans chaque popup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function closeWindow(){
      if (popup && popup.closeWindow){
        popup.closeWindow();
      }
      self.close();
    }
    avec dans la page principale comme dans les popup ayant créé un popup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var popup = window.open(...);
    de cette façon tu n'as pas a te soucier du nombre de popup à fermer, ça se fera en cascade.

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    et le param dependant ?

  6. #6
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    et le param dependant ?
    gné ?

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    ben oui dependant est un parmètre de window.open ...
    la fille se ferme lorsque la mere est fermée ...

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    la fille se ferme lorsque la mere est fermée ...
    Exact !
    Un oubli

    A+

  9. #9
    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 et merci pour vos réponses.

    Je n'arrive pas à adapter ce code, j'utilise une fonction personnelle pour l'ouverture des popups :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function ouvrirPopup2(url, name, hauteur, largeur, gauche, haut){
    	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");
    	popup.focus();
    	return popup;
    }
    Seulement je ne peux pas la modifier car elle est utilisée à d'autres endroits. J'ai essayé d'en créer une nouvelle uniquement pour la dermeture en cascade, mais je bloque

    Le système de l'array, c'est compliqué ou pas ?

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Jarodd Voir le message
    Je n'arrive pas à adapter ce code, j'utilise une fonction personnelle pour l'ouverture des popups :
    Pas de problème normalement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    popA = ouvrirPopup2(url, name, hauteur, largeur, gauche, haut);
    puisqu'elle retourne le handle de la nouvelle pop.

    Ceci dit, quel code ci-dessus te pose problème : il y en a 2 (voire potentiellement 4) ?

    A+

  11. #11
    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 parlais du post #4

    Je vais tester de suite ton dernier. Sinon j'ai trouvé un exemple sur le net avec childWindowHandles, est-ce que ce paramètre correpsond à l'inverse de window.opener ? Je ne trouve pas d'infos sur lui, pourtant ça serait bien pratique, un window.opened

  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
    Bon je commence à piger. Mais concernant le code du post #4, peut-on mettre la même variable pour toutes les popups ?

    Je le cite : dans chaque popup,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function closeWindow(){
      if (popup && popup.closeWindow){
        popup.closeWindow();
      }
      self.close();
    }
    Dans le doute, j'ai mis des noms différents : popPU pour la 1e popup, popPV pour la 2e. Ce qui donne :

    Fenêtre principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function closeAllPopups() {
    	if (popPU && popPU.closeWindow){
    		popPU.closeWindow();
    	}
    	if (popPV && popPV.closeWindow){
    		popPV.closeWindow();
    	}
    }
    1e popup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function closeWindow(){
    	if (popPU && popPU.closeWindow){
    		popPU.closeWindow();
    	}
    	self.close();
    }
    2e popup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function closeWindow(){
    	if (popPV && popPV.closeWindow){
    		popPV.closeWindow();
    	}
    	self.close();
    }
    Et j'ai bien déclaré les variables dans chaque page : var PopPU = ... var PopPV = ...

    Mais il doit me manquer quelque chose car cela ne réagit pas... C'est cette partir que je ne comprend pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (popPu && popPu.closeWindow)
    Est-ce qu'on vérifie que la fonction existe ? Que la fenêtre est déjà fermée ??? Dans les popups faut-il mettre un bouton qui appelle cette fonction ? Car là j'ai une fonction mais quand est-elle appelée ?

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    dependant ne te plait pas ?

  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
    Arf je n'avais pas compris de quoi il s'agissait et j'était parti sur les autres méthodes

    Si je ne me trompe pas c'est un paramèter de window.open. Donc j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function ouvrirPopup2(url, name, hauteur, largeur, gauche, haut){
    	var popup = window.open(url, name, "dependent = yes, directories = no, status = no, menubar = no, scrollbars = yes, location = no, resizable = yes, height = "+  hauteur +", width = "+ largeur +", left = "+ gauche +", top = "+ haut +", fullscreen = no");
    	popup.focus();
    	return popup;
    }
    (en gras : l'ajout)

    Mes popups sont bien appelées par cette fonction, or au clic du bouton Close il n'y a que la principale qui se ferme. Il faut faire auter chose pour que ça fonctionne ?

  15. #15
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    arf desolé c'est propriétaire netscape ...


    bon ce que je te propose pour résoudre ça c'est de faire un push des popups dans un array

    tabPopups=new Array();

    et à chaque fois que tu ouvres une popup tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabPopups.push(window.open(....))
    pour tout fermer :

    depuis la page mère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    i=0;
    while(tabPopups[i]){
    tabPopups.pop.close();
    i++;}
    et si tu ouvbre une petite fille depuis une fille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.parent.tabPopups.push(....)
    et une arrière petire fille depuis une petite fille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.parent.parent.tabPopups.push(....)

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    i=0;
    while(tabPopups[i]){
    tabPopups.pop.close();
    i++;}
    A quoi correspond ce pop ? Est-ce que c'est le nom à donner à toutes les popups ?

  17. #17
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    non c'est une instruction sur les arrays
    ça retourne le dernier element de l'array tout en le supprimant de l'array

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var foo=new Array('un', 'deux', 'trois')
     
    alert(foo.pop())
    alert( foo)

  18. #18
    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 essayé le push dans le tableau, mais quand ça veut pas, ça veut pas...

    Code page principale (le bouton pour tout fermer) :
    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
     
    <head>
    	<script language="JavaScript" type="text/javascript">
    		tabPopups = new Array();
     
    		function CloseAllPopups() {
    			i = 0;
    			while( tabPopups[i] ) {
    				tabPopups.pop.close();
    				i++;
    			}
    		}
    	</script>
    </head>
    ...
    <input type="button" name="PU" id="PU" value="Search" onClick="tabPopups.push(ouvrirPopup2('PU.php', 'PU', 300, 580, 0, 0))";>
    ...
    <input type='button' value='Close All' onClick='window.opener.document.form_modifyList.submit(); CloseAllPopups();' />
    Sur la popup fille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name = 'PU' value ='PU' onclick = "self.parent.tabPopups.push(ouvrirPopup2('PV.php', 'PV', 300, 425, 585, 0));">
    Mais cela ne réagit pas, pourquoi j'ai l'impression d'avoir bien respecté le code à mettre ?

  19. #19
    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
    Avec ceci ça fonctionne à moitié :

    Page principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type="button" name="PU" id="PU" value="Search" onClick="listesPU = ouvrirPopup2('listesPu.php', 'PU', 300, 580, 0, 0)";>
    [...]
    <input type='button' value='Close All' onClick='listesPU.close(); window.close();' />
    Là la principale et la fille se ferment. Mais en ajoutant la même commande
    de la fille à la petite-fille, cela ne fonctionne plus puisque le nom est donné sur la fille (la principale ne le connait pas), c'est sans doute là l'intérêt du push mais ça marche pô !

    Peut-être existe-t-il une fonction qui détecte quand la page est fermée ? Du genre "si fille est fermée je ferme aussi petie-fille" ? Je vais chercher de ce côté là...

  20. #20
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    arf desolé je me fais toujours avoir

    pop => pop()


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabPopups.pop().close();

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Plusieurs form avec un seul bouton submit ?
    Par Amelie MOREAU dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 06/03/2013, 11h43
  2. Envoyer plusieurs formulaires avec un seul bouton
    Par patheo2 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 17/03/2011, 11h08
  3. [1.x] Afficher et valider plusieurs formulaires avec un seul bouton
    Par alexou dans le forum Symfony
    Réponses: 2
    Dernier message: 24/08/2010, 11h04
  4. Valider plusieurs formulaires avec un seul bouton
    Par Bam chika wah wah! dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/04/2009, 12h53
  5. Réponses: 3
    Dernier message: 02/07/2008, 19h08

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