2016-05-06 6 views
2

Ich habe das folgende Skript, das einen Dropdown-Index verwendet, um einen Verweis auf eine Variable zu erstellen, um Koordinaten auf einer Google-Karte zu zeichnen. Dies sind die Koordinaten Objekte:Jquery-Variablentyp Problem

var posl0 = { lat: 53.486204, lng: -3.217980 }; 
var posl1 = { lat: 51.493399, lng: -2.994917 }; 
var posl2 = { lat: 53.328493, lng: -3.098814 }; 
var posl3 = { lat: 53.412157, lng: -2.838219 }; 
var posl4 = { lat: 53.481338, lng: -2.886647 }; 
var posl5 = { lat: 53.401431, lng: -2.994917 }; 
var posl6 = { lat: 53.513252, lng: -2.944996 }; 
var posl7 = { lat: 53.372710, lng: -3.183254 }; 
var posl8 = { lat: 53.374466, lng: -2.868754 }; 

Das ist mein Skript:

function addnewmarker(selc, mapno) { 
    var locaz = ["Aintree", "Formby", "Heswall", "Huyton", "Kirby", "Liverpool City", "Maghull", "West Kirby", "Woolton"]; 
    var pos = 'posl' + mapno; 
    var pos.toArray(); 
    alert(pos); 
    marker = new google.maps.Marker({ 
     position: pos, 
     map: map, 
     title: 'Aintree', 
     animation: google.maps.Animation.DROP, 
    }); 
    adsho(1); 
} 

Mein Problem scheint mit meiner Verwendung des pos Variable als Zeiger auf das posl Objekt zu sein. Wenn ich die Position als position: posl1 einstelle, funktioniert alles gut, aber position: pos tut nichts, obwohl es dasselbe alarmiert posl1 ref.

Kann mir bitte jemand helfen?

+0

Haben Sie für 'mapno' eine Variable haben? –

+0

Ihre Variable pos ist eine Zeichenfolge. In diesem Post erfahren Sie, wie Sie Variablen dynamisch referenzieren: http://StackOverflow.com/Questions/5117127/use-dynamic-Variable-Names-in-Javascript –

+0

Sie verwenden POS nicht als Zeiger auf irgendetwas - Sie haben keine Array, auf das verwiesen werden soll. Sie haben ein Bündel von nicht verwandten Variablen. Warum * verwenden Sie kein Array? –

Antwort

3

Das Problem ist, weil Ihr pos Wert ein String ist, kein Verweis auf das Objekt in den Variablen posX gehalten. Sie könnten eval() verwenden, um dies zu beheben, aber eval() ist unglaublich schlechte Praxis und sollte vermieden werden.

Stattdessen können Sie erreichen, was Sie brauchen, indem Sie stattdessen alle Ihre Objekte in einem Array platzieren und dann per Index darauf zugreifen. Etwas wie folgt aus:

var pos = [{ lat: 53.486204, lng: -3.217980 },{ lat: 51.493399, lng: -2.994917 },{ lat: 53.328493, lng: -3.098814 },{ lat: 53.412157, lng: -2.838219 },{ lat: 53.481338, lng: -2.886647 },{ lat: 53.401431, lng: -2.994917 },{ lat: 53.513252, lng: -2.944996 },{ lat: 53.372710, lng: -3.183254 },{ lat: 53.374466, lng: -2.868754 }] 

function addnewmarker(selc, mapno) { 
    var locaz = ["Aintree", "Formby", "Heswall", "Huyton", "Kirby", "Liverpool City", "Maghull", "West Kirby", "Woolton"]; 

    marker = new google.maps.Marker({ 
     position: pos[mapno], 
     map: map, 
     title: 'Aintree', 
     animation: google.maps.Animation.DROP, 
    }); 
    adsho(1); 
} 

Beachten Sie auch, dass die Verwendung von jQuery toArray() nicht erforderlich ist (und höchstwahrscheinlich Fehler verursacht) und die locaz Array nicht verwendet wird, aber ich nehme an, dies einfach aufgrund redacting Teile des Codes ist in der Frage.

+0

Vielen Dank für Ihre Hilfe Mann - funktioniert ein Vergnügen und schön erklärt – Dancer

+0

Kein Problem, froh, zu helfen. –

0

Ersetzen Sie diese Zeile

var pos = eval('posl' + mapno); 
+1

Ew. Während es funktionieren könnte, scheint es kaum die beste oder sogar eine vernünftige Lösung zu sein. Eval Odd nur selten ein guter Ansatz. –

+0

** Objektorientiertes JavaScript - Zweite Ausgabe **: eval() kann manchmal nützlich sein, sollte aber vermieden werden, wenn es andere Optionen gibt. Die meiste Zeit gibt es Alternativen, und in den meisten Fällen sind die Alternativen eleganter und einfacher zu schreiben und zu pflegen. "Eval ist böse" ist ein Mantra, das man oft von erfahrenen JavaScript-Programmierern hört. –

0

Dies versuchen;)

Die Art und Weise Array von Elementen erstellen ist falsch und die Art und Weise das Element aus dem Array zuzugreifen, verwendet, ist wieder falsch;

Sie können dem Array einzeln Elemente hinzufügen, wenn Sie es definieren;

Mehrere Elemente beim Erstellen eines Arrays;

var array = [1, 2, 3, 4, 6, 7];/* in this way you can assign as many elements you want to add to this array array index starts from 0; */ 

var array = []; /* empty array later you can add elements to it */ 

array[0] = 1; 
array[1] = 2; /* add element to directly at desired index */ 

array.push(1); 
array.push(2);/* add element to array at the end */ 

Also in Ihrem Fall versuchen, diese

var positions = [{ lat: 53.486204, lng: -3.217980 }, 
    { lat: 51.493399, lng: -2.994917 }, 
    { lat: 53.328493, lng: -3.098814 }, 
    { lat: 53.412157, lng: -2.838219 }, 
    { lat: 53.481338, lng: -2.886647 }, 
    { lat: 53.401431, lng: -2.994917 }, 
    { lat: 53.513252, lng: -2.944996 }, 
    { lat: 53.372710, lng: -3.183254 }, 
    { lat: 53.374466, lng: -2.868754 }]; 


function addnewmarker(selc, mapno) { 
    var locaz = ["Aintree", "Formby", "Heswall", "Huyton", "Kirby", "Liverpool City", "Maghull", "West Kirby", "Woolton"]; 
    var pos = positions[mapno]; 
    alert(pos); 
    marker = new google.maps.Marker({ 
     position: pos, 
     map: map, 
     title: 'Aintree', 
     animation: google.maps.Animation.DROP, 
    }); 
    adsho(1); 
} 
+0

Könnten Sie dem OP helfen, indem Sie eine Erklärung hinzufügen, was die OPs sind und wie das hilft? –