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:
<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:
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:
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