Question

Dans mon application Google Maps je peux placer des marqueurs sur la carte, et je garde une référence à chacun des marqueurs placés, ainsi que des informations supplémentaires dans un tableau appelé markers.

Ajout de marqueurs est facile, je viens push() l'objet nouvellement créé sur la matrice (markers.push(marker));

Cependant, quand il s'agit de la suppression d'un marqueur arbitraire du tableau, étant donné un indice de la fente, il ne se comporte pas comme prévu. Ma fonction est:

function deleteMarker(markerIndex) {
    if (markerIndex!='' && markerIndex>=0 && markerIndex<markers.length) {
        if (confirm('Do you really want to remove this marker from the map?')) {
            alert('deleting marker '+markerIndex); //debugging purposes
            markers.splice (markerIndex, 1);
        }
    }
}

Je n'ai pas d'expérience avec la fonction splice (), mais regardant sa description @ W3Schools il semble être assez simple. Cependant, je reçois le comportement suivant:

markers.splice() ne fait rien. Alors qu'est-ce que je fais mal?

Et aussi, quand markerIndex est 0 aucune boîte de confirmation est affichée. Au début, je supposais Toutefois, longue si condition évaluée false et donc le tout bloc de code a été sautée, en utilisant Firebug pour parcourir les appels que j'ai trouvé que la condition est (bien sûr) pour l'indice 0 lorsque tableau est non vide , étape suivante révèle que le if (confirm(...)) et alert('deleting...) sont sautée et markers.splice() est appelé (mais rien ne se passe). Ce comportement est si étrange que j'ai décidé d'ouvrir cette question.

Quelqu'un peut-il s'il vous plaît préciser ce qui se passe?

Je pensais que la suppression des marqueurs sera le bit le plus facile de la fonctionnalité pouvait faire. Je peux les ajouter, modifier leur contenu, même Effacer tous les marqueurs (marqueurs pop()-ment au large de la baie de markers jusqu'à vide) et tout fonctionne bien.

Était-ce utile?

La solution

Un problème avec votre code est que JavaScript interprète 0 == '' comme vrai, donc pour un markerIndex de zéro, votre confirmation code n'est pas exécuté. Je suppose que vous avez mal interprété les étapes Firebug montre ou qu'il est tout simplement ici puisque votre poussette si condition évaluera en fait faux pour une markerIndex de 0.

Vous pouvez utiliser comparaison de type stricte en ajoutant un = supplémentaire:

if (markerIndex !== '' && ...) {

Une approche plus facile serait:

if (markers[markerIndex] !== undefined) {

Depuis JavaScript ne soulève pas d'erreur lors de l'accès des membres d'objet non définis.

Votre autre problème avec splice() ne fonctionne pas est bizarre (il devrait fonctionner).

Autres conseils

function deleteMarker(markerIndex) {
    if (markers[markerIndex] !== undefined) {
        if (confirm('Do you really want to remove this marker from the map?')) {
            map.removeOverlay(markers[markerIndex]);
            markers.splice (markerIndex, 1);
        }
    }
}

Cela semble prendre soin de tous les problèmes. Merci pour vos réponses, très apprécié. J'aime particulièrement l'idée de réduire la première condition si juste:

if (markers[markerIndex] !== undefined)

splice() semble fonctionner directement sur le tableau (contrairement à ce que NuclearDog a laissé entendre) et cela fonctionne comme prévu. Mon cher Firebug me tromper.

ne sais pas si c'est ce qui se passe ici. mais je l'ai vu différemment le même code exécuté dans Firebug lorsqu'il est débogué v quand il ne débogué. Je suis sûr que je n'avais pas des montres qui interféraient avec le code soit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top