IE 8 не поддерживает push? - PullRequest
6 голосов
/ 19 июля 2010

Я пытаюсь вставить пару ключ / значение в serializeArray (из jquery).

Итак, у меня есть что-то вроде

var form = $('#form');
var sendFormData = form.serializeArray();
sendFormData.push({ "name": "Name", "value": "test"});

В Firefox это работает, но в IE 8 я получаю

Строка: 51 Ошибка: объект не поддерживает это свойство или метод

Так что, похоже, указывает на эту линию. Так что ie 8 не поддерживает push, если так, каким образом я могу добавить пару ключ / значение, которая будет работать во всех браузерах (5 основных Firefox, т.е. 8, Chrome, Opera, Safari)

Ответы [ 5 ]

11 голосов
/ 19 июля 2010

Что у вас работает (даже в IE8), вы можете проверить это здесь: http://jsfiddle.net/ZAxzQ/

Должно быть что-то вне вопроса, который вы делаете, чтобы получить эту ошибку:)

.push() существует до тех пор, пока объект Array , я никогда не видел браузер, который не поддерживает его ... вашНеподдерживаемая ошибка имеет для чего-то другого.

1 голос
/ 07 октября 2011

Я думал, что у меня та же проблема; но в итоге обнаружил, что моя проблема заключалась в том, что IE7-IE8 не реализовывал Array.prototype.indexOf. Если вы хотите использовать это, вы можете перейти по этой ссылке: indexOf .

1 голос
/ 19 июля 2010

У меня нет доступа к IE atm, но я уверен, что он поддерживает push.Убедитесь, что sendFormData считается массивом:

Object.prototype.toString.call(sendFormData) === '[object Array]';

Что-то еще, что IE любит делать, это сообщить вам, что в строке после ошибки произошла ошибка, поэтому она может быть частью form.serializeArray () строка.

1 голос
/ 19 июля 2010

Это не исчерпывающий ответ, так как он не решит вашу проблему, но метод Array.push() работает в IE8:

var arr = [];
arr.push({ "name": "Test Name", "value": "Test Value"});
alert(arr[0].name);    // Displays "Test Name"

Вышесказанное также можно переписать следующим образом:

var arr = [];
arr[arr.length] = { "name": "Test Name", "value": "Test Value"};
alert(arr[0].name);    // Displays "Test Name"
0 голосов
/ 19 июля 2010

Конечно, самое простое другое решение - сделать что-то вроде этого:

var sendFormData = $("#form").append("<input id='someuniqueID' type='hidden' name='name' value='test' />").serializeArray();
$("#someuniqueID").remove(); //optional could keep it in there if you wanted
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...