JS Leaflet : passage de paramètres à une fonction
Herve_be
Messages postés
1123
Date d'inscription
Statut
Membre
Dernière intervention
-
Herve_be Messages postés 1123 Date d'inscription Statut Membre Dernière intervention -
Herve_be Messages postés 1123 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Un code qui fonctionne très bien ne fonctionne plus une fois qu'il est encapsulé dans une fonction.
Ceci fonctionne très bien pour afficher un popup quand on clique sur une trace
mais je ne parviens pas à le mettre dans une fonction
quand je clique j'obtiens
Uncaught TypeError: Cannot read property 'feature' of undefined
sur la ligne en face de laquelle j'ai mis une flèche
et si je commente froidement cette ligne j'obtiens
Uncaught ReferenceError: feature is not defined sur la ligne suivante
Je pense qu'il s'agit simplement d'un passage de paramètres mais mes connaissances en JS ne sont pas suffisante pour que je comprenne mon erreur : un petit coup de main ?
Merci
Un code qui fonctionne très bien ne fonctionne plus une fois qu'il est encapsulé dans une fonction.
Ceci fonctionne très bien pour afficher un popup quand on clique sur une trace
var customLayer = L.geoJson(null, { ... }, onEachFeature: function(feature, layer) { if (feature.properties.name) { layer.bindPopup(feature.properties.name); } } });
mais je ne parviens pas à le mettre dans une fonction
function popup(e) { layer = e.layer, feature = layer.feature; <== if (feature.properties.name) { layer.bindPopup(feature.properties.name); } } ... function Interaction(feature, layer) { layer.on({ click: popup }); } ... var customLayer = L.geoJson(null, { ... }, onEachFeature: Interaction });
quand je clique j'obtiens
Uncaught TypeError: Cannot read property 'feature' of undefined
sur la ligne en face de laquelle j'ai mis une flèche
et si je commente froidement cette ligne j'obtiens
Uncaught ReferenceError: feature is not defined sur la ligne suivante
Je pense qu'il s'agit simplement d'un passage de paramètres mais mes connaissances en JS ne sont pas suffisante pour que je comprenne mon erreur : un petit coup de main ?
Merci
A voir également:
- JS Leaflet : passage de paramètres à une fonction
- Copiez l'image dans un logiciel d'édition d'images ou un outil en ligne comme js paint ou pixlr e. remplissez les cases en suivant le code couleur. des cases supplémentaires vont se remplir automatiquement. que représente le dessin ? ✓ - Forum Windows
- Arrondi js ✓ - Forum Windows
- Remplir une case de tableau avec une couleur grise avec texture de pointillés ✓ - Forum Photoshop
- Reproduction d'un dessin - Forum Graphisme
- Js/kryptik.ad ✓ - Forum Virus
3 réponses
Bonjour,
effectivement, visuellement ça fonctionne comme souhaité, merci beaucoup,
mais j'ai une erreur dans Leaflet quand je clique sur la trace
Uncaught TypeError: Cannot read property 'call' of undefined
at e.fire (leaflet.js:5)
at e._fireDOMEvent (leaflet.js:5)
at e._handleDOMEvent (leaflet.js:5)
at HTMLDivElement.r (leaflet.js:5)
Voici le code complet (j'ai mis directement la fonction Interaction dans onEachFeature mais ça ne change rien)
effectivement, visuellement ça fonctionne comme souhaité, merci beaucoup,
mais j'ai une erreur dans Leaflet quand je clique sur la trace
Uncaught TypeError: Cannot read property 'call' of undefined
at e.fire (leaflet.js:5)
at e._fireDOMEvent (leaflet.js:5)
at e._handleDOMEvent (leaflet.js:5)
at HTMLDivElement.r (leaflet.js:5)
Voici le code complet (j'ai mis directement la fonction Interaction dans onEachFeature mais ça ne change rien)
function popup(feature, layer) { if (feature.properties.name) { layer.bindPopup(feature.properties.name); } } function highlightFeature(e) { var layer = e.target; layer.setStyle({ weight: 5, color: '#666', dashArray: '', fillOpacity: 0.7 }); if (!L.Browser.ie && !L.Browser.opera && !L.Browser.edge) { layer.bringToFront(); } } function resetHighlight(e) { customLayer.resetStyle(e.target); } ... var customLayer = L.geoJson(null, { style: function(feature) { if (!feature.properties.id) { feature.properties.id = n++; } var iColor = feature.properties.id % colors.length; return { color: colors[iColor] }; }, onEachFeature: function(feature, layer) { layer.on({ mouseover: highlightFeature, mouseout: resetHighlight, click: popup(feature, layer) }); } });
Tu vois que tes fonctions attendent un (ou plusieurs selon les cas) paramètres ?
( le trucs qui se trouvent entre parenthèses après le nom de la fonction ..... )
par exemple
Et par conséquent... quand tu fais appel à ces fonctions... ben... il faut leur passer la variable qui va bien...
( le trucs qui se trouvent entre parenthèses après le nom de la fonction ..... )
par exemple
function resetHighlight(e)
Et par conséquent... quand tu fais appel à ces fonctions... ben... il faut leur passer la variable qui va bien...
Je comprends ce que tu écris,
par contre je ne comprends pas pourquoi parmi
mouseover: highlightFeature,
mouseout: resetHighlight,
click: popup(feature, layer)
les 2 premières auxquelles je ne donne pas de paramètre fonctionnent correctement sans erreur
alors que popup à qui je passe 2 paramètres fonctionne très bien aussi mais donne une erreur dans Leaflet.
par contre je ne comprends pas pourquoi parmi
mouseover: highlightFeature,
mouseout: resetHighlight,
click: popup(feature, layer)
les 2 premières auxquelles je ne donne pas de paramètre fonctionnent correctement sans erreur
alors que popup à qui je passe 2 paramètres fonctionne très bien aussi mais donne une erreur dans Leaflet.