2010-07-18 27 views
6

Estoy tratando de insertar un par de clave/valor en un serializeArray (de jquery).¿IE 8 no es compatible con push?

así que tengo algo así como

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

en Firefox esto funciona todavía en IE 8 consigo

Line: 51 Error: Object doesn't support this property or method

por lo que parece estar apuntando a esta línea. Entonces, es decir, 8 no soportan push si es así, ¿de qué manera puedo agregar un par de clave/valor que funcionará en todos los navegadores (los 5 principales de Firefox, ie8, Chrome, Opera, Safari)

+2

Aceptaste una respuesta pero no explicaste por qué tu código se estaba rompiendo ... ¡Tengo curiosidad! –

+0

Tuve un problema similar en IE8 que resultó ser un mensaje de error engañoso y un seguimiento de la pila. Tienes que trazar todo el camino en el código IE8, o puede hacer algunas cosas irritantes ... –

Respuesta

11

lo que tienes obras (incluso en IE8), puede probarlo aquí: http://jsfiddle.net/ZAxzQ/

Debe haber algo fuera de la cuestión que se está haciendo para conseguir que el error :)

.push() ha existido siempre y cuando el objeto Array, nunca he visto un navegador que no lo hace apoyo es ... el error no admitido tiene que proviene de otra cosa.

1

Esto no es un respuesta exhaustiva, ya que no va a resolver su problema, pero el método Array.push() funciona en IE8:

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

lo anterior también se puede volver a escribir como sigue:

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

La segunda forma es una forma muy extraña de escribir ese mi humilde opinión. –

1

No tengo acceso a IE atm, pero estoy seguro de que admite push. Compruebe que sendFormData se considera una matriz:

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

Otra cosa IE le gusta hacer, es decir que hay un error en la línea después se produjo el error, por lo que puede ser parte de la form.serializeArray() Línea .

+0

Hmm vuelve como falso. Sin embargo, no estoy seguro de por qué. Me gusta decir que el código que ves es lo que tengo en mi archivo js. Comenté todo lo demás solo para asegurarme también. – chobo2

+0

¿Cómo vuelve la primera parte? es decir, Object.prototype.toString.call (sendFormData) Como se está generando a través de una función, no estoy seguro de si mostrará la función utilizando ese método – Psytronic

0

Por supuesto, el más fácil Otra solución es hacer algo como esto:

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 
+1

Creo que tendremos que estar en desacuerdo sobre cuál es la forma "más fácil" aquí ... esto es más código, menos intuitivo y mucho * más caro ... Realmente recomiendo esto, ya que las otras respuestas muestran que esto * no debería * ser el área problemática de todos modos, esta es una matriz simple/operación de objeto. –

+0

De acuerdo, tal vez no sea el más fácil, pero aún así resolvería el problema. Estoy de acuerdo en que no debería ser necesario, lo que él debería funcionar, pero si por algún motivo no puede depurarlo, también existe esta opción. No veo cómo es menos intuitivo, sin embargo, mirándolo, puedo ver exactamente qué está pasando. Pero sí, la sobrecarga será más grande para eso. – Psytronic

1

pensé que tenía el mismo problema; pero terminé encontrando que mi problema era que IE7-IE8 no implementaba Array.prototype.indexOf. Sin embargo, si desea usar eso, puede ir a este enlace: indexOf.

Cuestiones relacionadas