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 :

Simuler l'appui d'un bouton pour exécuter une commande d'export de données


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Utilisateur occasionnel de MySQL
    Inscrit en
    Décembre 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Utilisateur occasionnel de MySQL

    Informations forums :
    Inscription : Décembre 2017
    Messages : 49
    Par défaut Simuler l'appui d'un bouton pour exécuter une commande d'export de données
    Bonjour,


    Je suis en train de modifier une page html qui me permet d'afficher des cartes avec l'API Leaflet.

    Dans cette page je peux exporter les données geojson d'une couche en cliquant sur un bouton dirigeant vers un lien dans la page dont voici le code :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#" id='exportgpx' data-toggle="tooltip" title="Enregistrer les waypoints et/ou tracés au format gpx">Gpx</a>

    Coté javacript, ce lien aboutit à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    document.getElementById('exportgpx').onclick = function(e) {
                // Extract GeoJson from featureGroup
                var data = exportlayers.toGeoJSON();
                var gpx = togpx(data);
                // Stringify the GeoJson
                var convertedData = 'text/gpx;charset=utf-8,' + encodeURIComponent(gpx);
                // Create export
                var name = prompt('Enter file name','data'); // second param can be empty, it is the default value
                document.getElementById('exportgpx').setAttribute('href', 'data:' + convertedData);
                document.getElementById('exportgpx').setAttribute('download',name + '.gpx');
        }
    Les exports de données sont fonctionnels.

    Maintenant je désire enchaîner deux commandes, d'une part une sélection de couches à exporter avec une checkbox à choix multiples, puis une fois les choix réalisés, les valider pour export dans une couche et poursuivre par l'export vers le fichier gpx sans cliquer sur le bouton "exportgpx" sur la page, mais en simulant son appui. J'ai utilisé ce 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
    25
    26
    27
    28
    29
    function valid(){
     
    var exportlayers = L.featureGroup();
     
    var checkboxes1 = document.getElementById("lieux1");
    if (checkboxes1.checked){
    layerGroup001.addTo(exportlayers);}
    var checkboxes2 = document.getElementById("lieux2");
    if (checkboxes2.checked){
    layerGroup002.addTo(exportlayers);}
    var checkboxes3 = document.getElementById("lieux3");
    if (checkboxes3.checked){
    layerGroup003.addTo(exportlayers);}
     
    const evt = new MouseEvent("click", {
      view: window,
      bubbles: true,
    );
    document.getElementById('exportgpx').dispatchEvent(evt);
     
    document.getElementById('exportgpx').onclick = function(e) {
                var data = exportlayers.toGeoJSON();
                var gpx = togpx(data);
                var convertedData = 'text/gpx;charset=utf-8,' + encodeURIComponent(gpx);
                var name = prompt('Enter file name','data'); // second param can be empty, it is the default value
                document.getElementById('exportgpx').setAttribute('href', 'data:' + convertedData);
                document.getElementById('exportgpx').setAttribute('download',name + '.gpx');
        }
    }
    Je constate que l'export ne se fait pas à la première validation, mais en renouvelant cette validation. Je pense que la simulation d'appui doit être en cause, mais je ne sais comment y remédier.

    Je vous remercie de votre aide

    Bernard

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    pas tout bien compris mais est-cce qu'un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('exportgpx').click();
    ne suffirait pas ?

    Nota : pourquoi mettre un élément <a> alors que sémantiquement ce rôle revient à un <button> pouvant très largement être stylé en CSS ?

  3. #3
    Membre averti
    Homme Profil pro
    Utilisateur occasionnel de MySQL
    Inscrit en
    Décembre 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Utilisateur occasionnel de MySQL

    Informations forums :
    Inscription : Décembre 2017
    Messages : 49
    Par défaut
    Bonjour NoSmoking,


    Pour développer ma page Leaflet je me suis inspiré de ce code : https://gist.github.com/danswick/d30c44b081be31aea483

    Je viens de remplacer la simulation de cet export par : document.getElementById('exportgpx').click();.

    Le comportement est identique, je dois toujours cliquer deux fois pour que cet export se lance

    J'ai répété deux fois

    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
    document.getElementById('exportgpx').click();
     
    document.getElementById('exportgpx').onclick = function(e) {
                // Extract GeoJson from featureGroup
                var data = exportlayers.toGeoJSON();
     
                var gpx = togpx(data);
                // Stringify the GeoJson
     
    			var convertedData = 'text/gpx;charset=utf-8,' + encodeURIComponent(gpx);
                // Create export
    			var name = prompt('Enter file name','data'); // second param can be empty, it is the default value
                document.getElementById('exportgpx').setAttribute('href', 'data:' + convertedData);
                document.getElementById('exportgpx').setAttribute('download',name + '.gpx');
        }
    Ça génère le fichier, il semblerait que ce lien dans le bouton soit différent d'un simple click ?

    Bernard

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Attention :
    il faut que la fonction à executer sur le clic soit affectée avant de cliquer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    const oBtn = document.getElementById("exportgpx");
    // on défini ce que l'on veut faire au clic
    oBtn.addEventListener("click", function(e) {
      // action au click
    });
    // maintenant on peut simuler le clic !
    oBtn.click();

  5. #5
    Membre averti
    Homme Profil pro
    Utilisateur occasionnel de MySQL
    Inscrit en
    Décembre 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Utilisateur occasionnel de MySQL

    Informations forums :
    Inscription : Décembre 2017
    Messages : 49
    Par défaut
    Je viens de tester cette simulation de click :
    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
    const oBtn = document.getElementById("exportgpx");
    // on défini ce que l'on veut faire au clic
    oBtn.addEventListener("click", function(e) {
    document.getElementById('exportgpx').click();
    });
    // maintenant on peut simuler le clic !
    oBtn.click();
     
     document.getElementById('exportgpx').onclick = function(e) {
                // Extract GeoJson from featureGroup
                var data = exportlayers.toGeoJSON();
     
                var gpx = togpx(data);
                // Stringify the GeoJson
     
    			var convertedData = 'text/gpx;charset=utf-8,' + encodeURIComponent(gpx);
                // Create export
    			var name = prompt('Enter file name','data'); // second param can be empty, it is the default value
                document.getElementById('exportgpx').setAttribute('href', 'data:' + convertedData);
                document.getElementById('exportgpx').setAttribute('download',name + '.gpx');
     
    }
    Il me faut toujours valider deux fois pour obtenir cet export, ai-je bien pris en compte le code ?

    Bernard

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Premier point, contrairement à ce que je t'ai dis plus haut, et après avoir regardé ton lien, il s’avère qu'il te faut bien utiliser un élément <a> car tu l'utilises pour le download.

    Ceci étant réatbli :
    Il me faut toujours valider deux fois pour obtenir cet export, ai-je bien pris en compte le code ?
    Ta correction est erronée car visiblement tu n'a pas saisie ce que tu faisais, donc on reprend.
    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
    // récup. de l'objetHTML de ton lien
    const elemExport = document.getElementById("exportgpx");
     
    // affectation de ce que l'on veut faire au clic
    elemExport.addEventListener("click", function() {
      // Extract GeoJson from featureGroup
      const data = featureGroup.toGeoJSON();
     
      // Stringify the GeoJson
      const convertedData = 'text/json;charset=utf-8,' + encodeURIComponent(JSON.stringify(data));
     
      // Create export
      elemExport.setAttribute('href', 'data:' + convertedData);
      elemExport.setAttribute('download', 'data.geojson');
    });
     
    // si on veut simuler le clic
    elemExport.click();
    Pas plus de code à mettre et celui-ci remplace le tien.

    C'est maintenant que je ne comprends pas pourquoi tu veux simuler le clic !?!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/04/2017, 12h01
  2. [AC-2007] Bouton pour exécuter une tache d' exportation
    Par stephi222 dans le forum VBA Access
    Réponses: 2
    Dernier message: 31/07/2014, 08h06
  3. Réponses: 9
    Dernier message: 29/06/2010, 16h44
  4. Un bouton pour exécuter une fonction
    Par floctc dans le forum Langage
    Réponses: 5
    Dernier message: 05/05/2009, 11h18
  5. Fichier BATCH pour exécuter une commande (Wake on LAN)
    Par snoopy69 dans le forum Windows XP
    Réponses: 0
    Dernier message: 23/04/2008, 07h14

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