Jquery变量类型问题

时间:2016-05-06 10:12:50

标签: javascript jquery

我有以下脚本,该脚本使用下拉索引创建对变量的引用,以在Google地图上绘制坐标。这些是坐标对象:

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 };

这是我的剧本:

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);
}

我的问题似乎是我使用pos变量作为指向posl对象的指针。如果我输入的位置为position: posl1,则一切正常,但position: pos不执行任何操作,尽管它会提醒相同的posl1参考。

有人可以帮忙/建议吗?

3 个答案:

答案 0 :(得分:3)

问题是因为您的pos值是一个字符串,而不是对posX变量中保存的对象的引用。您可以使用eval()来解决此问题,但eval()是非常糟糕的做法,应该避免使用。

相反,您可以通过将所有对象放入数组然后通过索引访问它们来实现所需。像这样:

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);
}

另请注意,您不需要使用jQuery的toArray()(并且很可能导致错误)并且未使用locaz数组,但我认为这仅仅是因为编写了部分代码在问题中。

答案 1 :(得分:0)

替换此行

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

答案 2 :(得分:0)

试试这个;)

您创建元素数组的方式是错误的,并且您使用从数组访问元素的方式也是错误的;

您可以在定义元素时逐个或多个添加元素;

创建数组时的多个元素;

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 */   

所以在你的情况下试试这个

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);
 }