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

Bibliothèques & Frameworks Discussion :

Afficher-masquer la carte [LeafLet]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 79
    Points
    79
    Par défaut Afficher-masquer la carte
    Bonjour !
    J'ai un petit souci sur mon projet au niveau du refresh lié à l'instance.

    Quand je fais ma première recherche en saisissant une bonne suite de chiffres, pas de souci, j'ai bien les infos demandés avec ma carte Leaflet et les bonnes coordonnées. Sur ma deuxième recherche, si je fais une erreur de saisi, j'ai bien mon message d'erreur mais j'ai un cadre gris à l'emplacement de la carte, si je tente une 3ème saisi en rentrant un autre bonne suite de chiffres, j'ai toujours mon message d'erreur avec un autre message d'erreur dans ma console :

    Uncaught Error: Map container is being reused by another instance

    Pour bien faire, je dois faire Ctrl+F5 avant chaque recherches pour que ça marche, mais j'imagine qu'il y a une solution à ça...

    Dans mon code j'ai volontairement laissé en commentaire les parties "display" car je pensais que cette méthode résoudrait le problème du cadre gris mais en faite il fait buguer Leaflet. Par exemple, si ces lignes sont actives et que je fais 2 recherches à la suite (avec de bon chiffres et donc avec 2 résultats) la carte du 2ème résultat apparait avec la moitié en gris, et plus je fais des recherches, plus la partie grise s’agrandit. Mais je pense que ce problème est aussi lié à ce problème d'instance.

    Merci d'avance

    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
    <?php 
    include 'vendor/autoload.php';
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8"/>
            <link rel="stylesheet" href="style.css"/>
            <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css"
       integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A=="
       crossorigin=""/>
       <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"
       integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA=="
       crossorigin=""></script>
            <title>Entreprise</title>
        </head>
        <body>
            <form id="form" class="form">
                <input type="text" id="sic" class="num" name="texte" placeholder="SIRET"/>
                <input type="submit" value="GO" id="valider" class="send"/>
            </form>
            <p id="result"></p>
            <div id="mapid"></div>
            <script src="script.js"></script>
        </body>
    </html>
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    let map;
     
    const form = document.getElementById('form');
    form.addEventListener('submit',(ev) => {
        ev.preventDefault();
        if(map){
            //map.getContainer().style.display = "none";
            map.remove();
        }
        let saisi = document.getElementById('sic').value;
        if(isNaN(saisi) || saisi.length != 14){
            document.getElementById('result').textContent = "Veuillez rentrer un numéro SIRET valable (14 chiffres)";
        }else{
            document.getElementById('result').textContent ='';
            fonctionTest(saisi);
        }
     
    })
     
    function fonctionTest(siret){
        let request = new XMLHttpRequest();
        request.open("GET", 'apireq.php?texte='+siret, true);
        request.addEventListener("readystatechange",  () => {
            if (request.readyState === XMLHttpRequest.DONE && request.status === 200) {
                const reponse = JSON.parse(request.responseText);
                addResult(reponse.etablissement.unite_legale.denomination, reponse.etablissement.unite_legale.nom, reponse.etablissement.geo_adresse, reponse.etablissement.unite_legale.etablissement_siege.date_dernier_traitement);
                console.log(reponse);
                addCoor(reponse.etablissement.unite_legale.etablissement_siege.longitude, reponse.etablissement.unite_legale.etablissement_siege.latitude)
            }              
        });
        request.send();
    }
     
    function addResult(deno, nom, add, date){
        console.log(deno);
        if(deno == null){
            document.getElementById('result').textContent = nom+' '+add+' '+date;
        }else{
            document.getElementById('result').textContent = deno+' '+add+' '+date;
        }
    }
     
    function addCoor(long, lat){
        map = L.map('mapid').setView([lat, long], 15);  
        //map.getContainer().style.display = "block";
        L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);
    }

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    l'écran gris est le résultat normal de la commande "map.remove()".
    vous souhaitez quel résultat quand le numéro saisi n'est pas valide ? vous voulez que le plan ne change pas ou bien qu'il disparaisse ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 79
    Points
    79
    Par défaut
    qu'il disparaisse tout simplement !

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    dans ce cas je pense qu'il faut juste faire "map = L.map('mapid')" une seule fois au lancement de la page et vous cachez l'élément div "mapid" en css.
    ensuite si le code est valide, vous affichez l'élément et vous faites "map.setView".
    et si le code n'est pas valide, vous cachez l'élément.

    https://javascript.developpez.com/fa...SS#affichObjet

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 79
    Points
    79
    Par défaut
    J'ai tenté ça mais ca ne marche pas...

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        <body>
            <form id="form" class="form">
                <input type="text" id="sic" class="num" name="texte" placeholder="SIRET"/>
                <input type="submit" value="GO" id="valider" class="send"/>
            </form>
            <p id="result"></p>
            <div id="mapid"></div>
            <script src="script.js"></script>
        </body>

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #mapid { 
        height: 200px; 
        width: 500px;
        display: none;
    }


    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
    let map;
    map = L.map('mapid')
    const form = document.getElementById('form');
    form.addEventListener('submit',(ev) => {
        ev.preventDefault();
        let saisi = document.getElementById('sic').value;
        if(isNaN(saisi) || saisi.length != 14){
            document.getElementById('mapid').display = "none";
            document.getElementById('result').textContent = "Veuillez rentrer un numéro SIRET valable (14 chiffres)";
        }else{
            document.getElementById('mapid').display = "block";
            document.getElementById('result').textContent ='';
            fonctionTest(saisi);
        }
    })
     
    function addCoor(long, lat){
        map.setView([lat, long], 15);  
        //map.getContainer().style.display = "block";
        L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);
    }

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    vous avez loupé un morceau pour afficher et cacher, c'est ".style.display ...".

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 79
    Points
    79
    Par défaut
    Ca marche parfaitement !! Merci beaucoup !

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

Discussions similaires

  1. [Form] Afficher/Masquer une zone de texte
    Par SpyesX dans le forum IHM
    Réponses: 14
    Dernier message: 01/12/2005, 01h13
  2. Afficher/Masquer un <DIV> au clique de la souris.
    Par Joad dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/09/2005, 10h55
  3. Afficher masquer des blocs sans javascript
    Par Space Cowboy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 24/09/2005, 10h37
  4. Afficher / masquer des champs
    Par mickeliette dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/08/2005, 11h51
  5. Afficher/Masquer un bouton comme IE 6
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/07/2002, 13h12

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