howto: функция push () в js не вставляет значение - PullRequest
2 голосов
/ 13 февраля 2012

Я пытаюсь использовать Google Maps API, и я застрял здесь:

  • Мне нужна переменная массива (waypts) с определенными значениями в определенном формате.
  • когда я «помещаю» значение в мою переменную waypts, в качестве значения возвращается только «ОБЪЕКТ».
  • Мне нужно нажать на фактическое значение, установленное в выбранном тексте ввода.

с помощью jQuery и javascript (core)

Код:

<html>
<head>
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript">
        $('document').ready(function(){
            var waypts = [];
            var temp = $('input.boom').map(function(){
                return $(this).val();
            });

            for (var i=0;i<temp.length;i++){
                waypts.push({
                    location:temp[i].value,
                    stopover:true
                });
            }
            alert(waypts);
        });
    </script>
</head>
<body>
    <input type="text" class="boom" value="boom1"><br>
    <input type="text" class="boom" value="boom2"><br>
    <input type="text" class="boom" value="boom3"><br>
    <input type="text" class="boom" value="boom4"><br>
</body>
</html>

Ответы [ 4 ]

3 голосов
/ 13 февраля 2012

В вашем текущем коде waypts будет массивом объектов, каждый с атрибутом location и атрибутом stopover.

Вы можете изменить свой код на следующий, чтобы сделать его чище;

var waypts = $('input.boom').map(function(){
     return {
        location: $(this).val(),
        stopover: true
     };
}).get();

// waypts is now an array of objects with `location` and `stopover` attributes.
// you can see what each value is by alerting `waypts[i].location` and `waypts[i].stopover`.
2 голосов
/ 13 февраля 2012

Необходимо предупредить атрибуты массива

Попробуйте оповещение путевых точек [0] .location

Чтобы показать все элементы массива объектов, сделайте следующее:

var output="";
for (var o in waypts) {
  if (waypts.hasOwnProperty(o) {
    output += "\n"+o+":"+waypts[o].location + '-' + waypts[o].stopover;
  }
}
alert(output)

или для стандартного массива (как у вас, когда я читал ваш вопрос)

var output="";
for (var i=0, n=waypts.length;i<n;i++) {
  output += "\n"+i+":"+waypts[i].location + '-' + waypts[i].stopover;
}
alert(output)

или использовать jQuery

var output="";
$.each(waypts, function(i,item) {
  output+= i+':'+item.location+'-'+item.stopover;
});
alert(output)
1 голос
/ 13 февраля 2012

Каждый элемент в вашем массиве waypts будет объектом - вам нужно будет ссылаться на каждое значение в объекте по отдельности.Попробуйте заменить alert(waypts) на это, чтобы увидеть все данные в массиве:

for (var i = 0; i <= waypts.length; i++) {
    alert(waypts[i].location);
    alert(waypts[i].stopover);
}
0 голосов
/ 13 февраля 2012

Когда вы говорите

waypts.push({
                location:temp[i].value,
                stopover:true
            });

, вы помещаете новый буквальный объект (заключенный в {}) в waypts.

Таким образом, вы добавляете новые элементы в массивэти объекты местоположения / остановки.

Чтобы на самом деле ссылаться на значение location или stopover, вам нужно сначала проиндексировать waypts, используя [] (например, waypts[0] будет указывать на первый такой объект),Во-вторых, вам нужно сослаться на нужный вам атрибут: location или stopover.Вы делаете это с помощью стандартной «точечной нотации».Так, например, waypts[0].location даст вам значение местоположения первого элемента в вашем массиве waypts.

...