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 :

Transmettre le ScrollTop de l'opener de la popup


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 22
    Points
    22
    Par défaut Transmettre le ScrollTop de l'opener de la popup
    Bonjour,

    J'ai une page principale qui contient un tableau contenant une centaine de ligne de ma base de données sur chaque ligne j'ai un bouton "update" qui m'ouvre une popup permettant de modifier les champs de cette ligne dans ma base.
    Quand je valide mes modifications dans ma popup j'arrive à rafraichir ma page principale mais je reviens systématiquement en haut de ma page.

    Mon problème est : comment revenir au scroll du bouton qui a ouvert ma popup?

    J'utilise ce code dans ma popup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function refresh()
        {	
    	opener.document.location=opener.document.location;
    	window.close();
        }
    et ensuite j'appelle ma fonction sur un bouton (onClick)

    Merci d'avance.

    P.S : je suis assez mauvais en JS

  2. #2
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Essaie peut-être quelque chose comme :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function refresh()
        {	
            var pos = opener.scrollTop;
    	opener.document.location=opener.document.location;
            opener.scrollTop = pos;
    	window.close();
        }
    et dis-nous ce que ça raconte ^^

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Tout d'abord merci pour ta réponse.

    Citation Envoyé par RomainVALERI Voir le message
    Essaie peut-être quelque chose comme :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function refresh()
        {	
            var pos = opener.scrollTop;
    	opener.document.location=opener.document.location;
            opener.scrollTop = pos;
    	window.close();
        }
    et dis-nous ce que ça raconte ^^
    Malheureusement le rechargement se fait mais pas le scroll...

    J'ai essayé aussi ca avant de poster :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function refresh()
        {	
            var pos = opener.document.documentElement.scrollTop;
    	opener.document.location=opener.document.location;
            opener.document.documentElement.scrollTop = pos;
    	window.close();
        }

    (avec ou sans "window." devant le opener) ca ne marchait pas non plus ...

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Bonjour,

    C'est tout à fait normal que cela ne fonctionne pas.
    L'action effectuée est un chargement de page pas un rechargement...

    Essayes avec opener.document.location.reload()

    devyan

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Merci pour la réponse

    J'ai donc remplacé par opener.document.location.reload()

    La page se recharge correctement mais toujours pas de scroll. La page se recharge en haut.

    Mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        function refresh()
        {	
                 var pos=opener.scrollTop;
                 opener.document.location.reload();
                 opener.scrollTop=pos;
                 window.close();
        }
    idem si je met opener.document.scrollTop

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Je crois comprendre (peut etre) le problème.

    Si je teste ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function refresh()
        {	
    	opener.document.location.reload();
    	opener.scrollTo(0,200);
    	window.close();
        }
    La page se recharge et le scroll est en haut. (le scrollTo ne fonctionne pas)

    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function refresh()
        {	
    	opener.scrollTo(0,200);
    	window.close();
        }
    La page ne se rafraichit pas (forcément!) mais par contre le scroll bouge.

    Est ce qu'il y aurait pas un problème du au temps de rechargement ou un truc du genre ?!

  7. #7
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    C'est peut-être effectivement le temps nécessaire au moteur de rendu pour modéliser et réafficher la page qui empêche l'exécution du scrollTo (qui arrive "trop tôt")
    As-tu fait le test de mettre le scrollTo dans un setTimeOut de quelques millisecondes ? (100 à vue de nez)
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function refresh()
        {	
    	opener.document.location.reload();
            setTimeOut(function() {
    	   opener.scrollTo(0,200);
    	   window.close();
            }, 100);
        }
    ?

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Nope .. ca marche toujours pas, la page se rafraichit mais toujours en haut.

    (meme le setTimeout du scrollTo ne marche pas tout seul sans rafrachir...code ci dessous)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        function refresh()
        {	
    	setTimeout("opener.scrollTo(0,300)",1000);
    	window.close();
        }
    Ton code ne marche pas non plus
    J'ai une erreur (la page se rafraichit mais ne scroll pas . Mais la page ne se ferme pas)
    L'erreur est : Objet Attendu

  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
    Lorsque tu ouvres une popup avec window.open, tu crées un lien de "parenté" entre la popup et la page qui l'a ouverte (window.opener). Seulement, en rechargeant la page, tu détruis en même temps ce lien de parenté : la page rechargée n'est donc plus accessible depuis la popup.

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Normalement reload() "seul" devrait suffire (si tu fais F5 la page reviens à la position de scroll précédent)

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Lorsque tu ouvres une popup avec window.open, tu crées un lien de "parenté" entre la popup et la page qui l'a ouverte (window.opener). Seulement, en rechargeant la page, tu détruis en même temps ce lien de parenté : la page rechargée n'est donc plus accessible depuis la popup.
    Bonjour,

    Je comprends que le lien se casse. Cependant, je suis persuadé qu'il est possible de rétablir le scroll au moment du lancement de la popup quand on rafraichit. Il me faudrait un équivalent du F5 en fait.

    La fonction reload() "seule" recharge mais ne me redonne pas la position du scroll au moment du lancement de la popup...

    Merci quand meme ...

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par JimJames23 Voir le message
    La fonction reload() "seule" recharge mais ne me redonne pas la position du scroll au moment du lancement de la popup...
    Si c'est la position "au moment du lancement de la popup" que tu désires il faut donc le mémoriser (par exemple en la récupérant au chargement de la popup)

    Q: si l'utilisateur a changé de page dans la fenêtre ouvrant la popup tu fais quoi ? tu reviens à la page d'ouverture de la popup ?

  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
    Citation Envoyé par devyan Voir le message
    Si c'est la position "au moment du lancement de la popup" que tu désires il faut donc le mémoriser (par exemple en la récupérant au chargement de la popup)
    Il faudra alors passer par un système d'ancre.
    Citation Envoyé par devyan Voir le message
    Q: si l'utilisateur a changé de page dans la fenêtre ouvrant la popup tu fais quoi ? tu reviens à la page d'ouverture de la popup ?
    Si l'utilisateur a changé de page, il n'y a plus d'opener donc plus de reload possible

  14. #14
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par devyan Voir le message
    Q: si l'utilisateur a changé de page dans la fenêtre ouvrant la popup tu fais quoi ? tu reviens à la page d'ouverture de la popup ?
    Le problème ne se pose pas car l'utilisateur ne change pas de page ... c'est certain.
    -----
    Je suis d'accord, il faut récuperer la valeur du scroll..seulement les codes pour réattribuer cette valeur du scroll après reload ne fonctionne pas ...

    Un code du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function refresh()
    {
    var scroll=opener.scrollTop;
    opener.location.reload();
    opener.scrollTop=scroll;
    window.close();
    }
    fonctionne car il ne crée pas d'erreur et recharge bien la page .. mais il ne scroll pas la page ... (logique d'après le post précédent puisque le lien serait rompu ...)

    Alors comment faire ? (ou plutot comment font certains sites pour y arriver?!)


  15. #15
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Il faudra alors passer par un système d'ancre.
    What ?! lol
    Je suis un peu bidon en JS. Systeme d'ancre ?
    Si tu as un code ... je suis preneur

    Merci en tout cas!

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Si l'utilisateur a changé de page, il n'y a plus d'opener donc plus de reload possible
    opener donne un objet window pas document il me semble.
    Théoriquement cela ne devrai donc pas poser de problème

  17. #17
    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
    Tu ne pourras pas y arriver uniquement en JavaScript. Tu dois donc modifier ta structure HTML pour y ajouter des ancres : http://j-willette.developpez.com/tut...ge_2#LII-E-2-a

    Puis, au chargement de ta popup, tu recherches dans le DOM l'ancre la plus proche et au lieu de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    opener.location.reload()
    tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    opener.location.href = opener.location.href + '#' + ton_ancre

  18. #18
    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
    Citation Envoyé par devyan Voir le message
    opener donne un objet window pas document il me semble.
    oui, tout à fait
    Citation Envoyé par devyan
    Théoriquement cela ne devrai donc pas poser de problème
    Ben si, si l'utilisateur change de page, il remplace l'objet window, donc l'opener de la popup n'existe plus.

  19. #19
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    C'est bon à savoir

  20. #20
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Tu ne pourras pas y arriver uniquement en JavaScript. Tu dois donc modifier ta structure HTML pour y ajouter des ancres : http://j-willette.developpez.com/tut...ge_2#LII-E-2-a

    Puis, au chargement de ta popup, tu recherches dans le DOM l'ancre la plus proche et au lieu de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    opener.location.reload()
    tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    opener.location.href = opener.location.href + '#' + ton_ancre
    Ok j'ai regardé vite fait les ancres je vais tester ... mais le probleme c'est que ma page principale (l'opener donc) est un tableau ou j'affiche les lignes de ma base de données avec un bouton "update" à chaque ligne qui ouvre la popup et il faudrait donc que la page "scrolle" sur le bouton update de la ligne que j'ai cliqué...
    C'est possible avec une ancre ca ?!

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

Discussions similaires

  1. onbeforeunload + windows.open et les popup
    Par Emilie012 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/01/2009, 08h50
  2. window.open ouvre 2 popups
    Par arcane dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/11/2008, 18h22
  3. Opener null sur popup
    Par madevilts dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/12/2007, 09h27
  4. rediriger opener et fermer popup
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/07/2007, 11h57
  5. exécuter fonction au chargement de opener depuis un popup
    Par RobertVonTagada dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/01/2007, 14h15

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