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 :

Changer la valeur du hash


Sujet :

JavaScript

  1. #1
    Membre actif
    Profil pro
    Développeur Back-End
    Inscrit en
    Août 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2003
    Messages : 138
    Points : 265
    Points
    265
    Par défaut Changer la valeur du hash
    Bonjour,
    Je suis en train de faire une petite application html/javascript dont les pages se chargent en ajax (SPA)

    Et j'aimerai conserver "l'adresse" de la page en cours dans l'url sous la forme #ma_page
    Mais je n'arrive pas à changer le contenu plus d'une fois (ça fonctionne une première fois et après, ça ne fonctionne plus). Je ne comprends pas trop à quoi s'est dû.

    voici mon code :

    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
    21
    22
    23
    24
     
    $(document).ready(function() {
     
     
    	if ($(location).attr('hash')) {
    		charge($(location).attr('hash').substr(1));
    	} else {
    		// par defaut, si aucune page indiqué dans l'url, on charge la page splashscreen
    		charge("splashscreen");	
    	}
     
    	function charge(page) {
    		$(location).attr('hash', page); // C'EST ICI QUE J'ESSAYE DE CHANGER L'ADRESSE
    		$( "#app" ).load( "html/"+page+".html",function () {
    			$(".btn").click(function () {
    				var target = $(this).data("target");
    				charge(target);
    				$("body").scrollTop(0);
    			});
     
    		});
    	};
     
    });
    Par défaut, j'arrive bien sur ma page qui se "renomme" automatiquement en #splashscreen
    Mais après, quand je vais sur les pages suivantes, ça ne fonctionne plus.
    A chaque chargement de page, j'ajoute le code sur le "onClick" pour pouvoir accéder aux pages suivantes...

    Merci pour votre aide,

    Axel

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    C'est quoi var target = $(this).data("target"); ?

    Essaies plutôt avec html si tu veux récupérer le contenu, par exemple :
    Code HTML : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <!DOCTYPE html>
    <html>
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script> 
    $(function() {
     
            if ($(location).attr('hash')) {
                    charge($(location).attr('hash').substr(1));
            } else {
                    // par defaut, si aucune page indiqué dans l'url, on charge la page splashscreen
                    charge("splashscreen"); 
            }
     
            function charge(page) {
                    $(location).attr('hash', page); // C'EST ICI QUE J'ESSAYE DE CHANGER L'ADRESSE
                    $( "#app" ).load(page+".html",function () {
                                                                                                    
                            $(".btn").on('click',function () {
                                    var target = $(this).html();
                                    charge(target);
                                    $("body").scrollTop(0);
                            });
     
                    });
            };
    });
    </script> 
    </head>
    <body>
     
    <div id="app"></div>
     
    </body>
    </html>
    ça fonctionne pour peu que splashscreen.html et Page2.html soient définies et contiennent respectivement <div class="btn">Page2</div> et <div class="btn">splashscreen</div>

    Si tu veux intégrer tes menus dans la page initiale il faut externaliser les onclick sur les menu
    Code HTML : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <!DOCTYPE html>
    <html>
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script> 
    $(function() {
     
     
            if ($(location).attr('hash')) {
                    charge($(location).attr('hash').substr(1));
            } else {
                    // par defaut, si aucune page indiqué dans l'url, on charge la page splashscreen
                    charge("splashscreen"); 
            }
     
            function charge(page) {
                    $(location).attr('hash', page); // C'EST ICI QUE J'ESSAYE DE CHANGER L'ADRESSE
                    $( "#app" ).load(page+".html",function () {                                                             
                                    $("body").scrollTop(0);
                    });
            };
     
            $(".btn").on('click',function () {
                    var target = $(this).html();
                    charge(target);
            });
     
    });
    </script> 
    </head>
    <body>
    <div id="app"></div>
    <div class="btn">splashscreen</div>
    <div class="btn">Page2</div>
    </body>
    </html>

  3. #3
    Membre actif
    Profil pro
    Développeur Back-End
    Inscrit en
    Août 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2003
    Messages : 138
    Points : 265
    Points
    265
    Par défaut
    Excuse moi, j'ai oublié d'indiquer que dans mes pages, j'ai des boutons du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <button class="btn waves-effect waves-light blue" data-target="14">Suivant</button>
    Et du coup, il prends la valeur de "target" pour savoir quelle page charger (ici, il va charger la page 14.html)

    Le chargement fonctionne très bien, ce qui ne marche pas, c'est le changement d'url. Je voudrais que mon url devienne :
    monsite/#14

    Comme ça, une fois arrivé sur la page 14, si je fais "raffraichir" la page, je reste sur cette page (car le début de mon code va vérifier si j'ai une valeur dans $(location).attr('hash') et y accéder.

    Bref, le seul truc qui ne fonctionne pas, c'est le fait de changer l'url de la page.

    Merci pour votre aide,

    Axel

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par axel584 Voir le message
    Je voudrais que mon url devienne :
    monsite/#14
    et pourquoi pas monsite/index.html#14 (si ta page initiale est index.html) ?

  5. #5
    Membre actif
    Profil pro
    Développeur Back-End
    Inscrit en
    Août 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2003
    Messages : 138
    Points : 265
    Points
    265
    Par défaut
    Oui, oui, ce serait très bien. En fait, quelque soit l'adresse à laquelle j'accède à ma page, je voudrais que mon code change la partie après le #

    Ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(location).attr('hash', page);
    ne fonctionne pas et l'url ne change pas.

    Merci pour votre aide,

    Axel

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Je ne vois pas ce qui ne fonctionne pas. Je viens de tester ce code :
    Code HTML : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <!DOCTYPE html>
    <html>
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script> 
    $(function() {
     
     
            if ($(location).attr('hash')) {
                    charge($(location).attr('hash').substr(1));
            } else {
                    // par defaut, si aucune page indiqué dans l'url, on charge la page splashscreen
                    charge("splashscreen"); 
            }
     
            function charge(page) {
                    $(location).attr('hash', page); // C'EST ICI QUE J'ESSAYE DE CHANGER L'ADRESSE
                    $( "#app" ).load(page+".html",function () {
                            $(".btn").click(function () {
                                    var target = $(this).data("target");
                                    charge(target);
                                    $("body").scrollTop(0);
                            });
     
                    });
            };
     
    });
    </script> 
    </head>
    <body>
     
    <div id="app"></div>
     
    </body>
    </html>

    page splashscreen.html :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Document sans nom</title>
    </head>
     
    <body>
    Hello !
    <button class="btn waves-effect waves-light blue" data-target="page-2">Suivant</button>
    </body>
    </html>

    page page-2.html :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Document sans nom</title>
    </head>
     
    <body>
    Et re bonjour !
    <button class="btn waves-effect waves-light blue" data-target="splashscreen">Suivant</button>
    </body>
    </html>

    Fais des test avec ces trois fichiers et dis-moi ce qui ne fonctionne pas. Chez moi l'url change et tout fonctionne correctement.

  7. #7
    Membre actif
    Profil pro
    Développeur Back-End
    Inscrit en
    Août 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2003
    Messages : 138
    Points : 265
    Points
    265
    Par défaut
    Merci beaucoup.

    Ton exemple fonctionne parfaitement...

    Et du coup, je me suis rendu compte que ça n'avait rien à voir avec mon code, mais ça merdait quand j'active le plug-in ripple qui est un plug-in Chrome permettant de simuler un environnement "mobile" pour pouvoir générer des applications android/iOS avec Cordova.

    Encore merci pour ton aide.

    Axel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [javascript] Changer la valeur de onclick()
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/12/2005, 10h29
  2. [formulaire] changer une valeur affichée
    Par soad dans le forum Access
    Réponses: 8
    Dernier message: 11/10/2005, 18h59
  3. impossible de changer la valeur d'un hidden...
    Par Palmic dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 31/05/2005, 12h06
  4. Changer la valeur sélectionnée d'un <select> en javasc
    Par Oluha dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/02/2005, 15h53
  5. Changer la valeur de la MTU sur un LAN
    Par nin2 dans le forum Réseau
    Réponses: 3
    Dernier message: 19/02/2005, 15h47

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