2015-05-11 5 views
-1

У меня есть скрытое поле на моей веб-странице, которое я хочу хранить в коллекции объектов. HTML для этого:Объект не поддерживает свойство или метод 'push'

<div><input type="hidden" id="CheckedSubGroups" value="[]" /></div> 

Я тогда следующее JQuery:

$(".SubGroupCheckBoxes").on("click", function() { 
      if ($(this).is(':checked')) { 
       var array = $("#CheckedSubGroups").val(); 
       array.push('test object'); 
       $("#CheckedSubGroups").val(array); 
      } else 
       // do other stuff 

Это взрывает однако с «этот объект не поддерживает толкающий свойство или метод» ошибка

В отладчике я остановился на этой строке и проверил значение объекта массива, которое задано как «[]»

+5

Возвращаемое значение является строкой, поэтому вы не можете нажать на него. Возможно, лучше создать реальный массив, нажать на него и сохранить его в атрибуте 'data'' form', но это будет зависеть от того, как вы хотите получить доступ к информации позже. –

+1

Строка, содержащая символы '[]', не совпадает с массивом. – Barmar

+0

var array не является массивом его возвращаемой строки –

ответ

2

вы пытались справиться с JSON? как ...
var array = JSON.parse($("#CheckedSubGroups").val());
$("#CheckedSubGroups").val(JSON.stringify(array);

$(".SubGroupCheckBoxes").on("click", function() { 
    if (this.checked) { 
     var array = JSON.parse($("#CheckedSubGroups").val()); 
     array.push('test object'); 
     $("#CheckedSubGroups").val(JSON.stringify(array)); 
    } else 
     // do other stuff 
    } 
}); 
1

Я думаю, $("#CheckedSubGroups").val() может возвращать строку вместо массив.

Таким образом, вы должны преобразовать эту строку в массив перед вызовом метода push

var array = JSON.parse($("#CheckedSubGroups").val()); 
+0

вызовет ошибку, когда функция вызовет второй раз, потому что val недействителен json. strinigy перед установкой val – Mephiztopheles

0

Вы не прямое значение нажимной в массив. Вам нужен объект массива. Значение переменной нужно преобразовать в объект массива.

Метод push() добавляет новые элементы в конец массива и возвращает новую длину.

var fruits = ["Banana", "Orange", "Apple", "Mango"]; 
fruits.push("Kiwi"); 

http://www.w3schools.com/jsref/jsref_push.asp