(comprendre: sans que l’utilisateur n’ait cliqué au préalable).
- Source: Javascript, addEventListener callback function executes immediately and only once?
- Petite explication simple de ce qu’est un callback: Callback Function With Parameters in JavaScript
J’ai rencontré ce souci en cherchant à ajouter un addEventListener
'click'
à des markers que je créais dans ma fonction pour les placer sur une Google Maps.
Avec la déclaration suivante, la fonction invoquée ci-dessous en clickCallback
était exécutée immédiatement:
1 |
google.maps.event.addListener(marker, 'click', clickCallback(marker)); |
Pour pallier à mon problème, j’ai dû déclarer mon événement comme suit:
1 2 3 |
google.maps.event.addListener(marker, 'click', function(){ clickCallback(marker); }); |
Le code complet pour une vision plus globale:
La fonction dans laquelle j’initialise mon eventListener:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function setMarker(point, m, clickCallback) { // [PNG version]] let marker = new google.maps.Marker({ position: point.position, icon: mapOperator.icons[point.type].icon }); // Marker events google.maps.event.addListener(marker, 'click', function(){ clickCallback(marker); }); // END: Marker events return marker; } |
L’exécution de cette fonction:
1 |
mapApi.setMarker(point, i, mapOperator.topic_onMarkerClick); |
La callback function:
1 2 3 |
function topic_onMarkerClick(marker) { console.log("click!"); } |