2010-07-18 220 views
6

我想插入一个键/值对serializeArray(从jquery)。IE 8不支持推吗?

所以我有类似

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

在Firefox这部作品尚未在IE 8我得到

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

所以它似乎是指向这一行。因此,ie 8不支持推,如果是这样,我可以添加一个键/值对,将在所有浏览器(5主电源的firefox,ie8,铬,歌剧,Safari浏览器)工作方式

+2

你接受了一个答案,但没有解释为什么你的代码被破坏了......我很好奇! – 2011-03-11 23:28:41

+0

我在IE8中遇到了类似的问题,这是一个误导性的错误消息和堆栈跟踪。你必须追踪到IE8的代码,或者它可以做一些令人不愉快的事情... – 2012-06-28 04:36:16

回答

11

你有什么作品(甚至在IE8中),你可以在这里测试它:http://jsfiddle.net/ZAxzQ/

必须有你做的到得到这个错误:)

.push()一直围绕只要Array对象,我从来没有见过一个浏览器,支持的问题之外的东西它......你不支持的错误来自别的东西。

1

这不是一个详尽的答案,因为它不会解决你的问题,但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" 
+2

第二种方法是写一个很奇怪的方式恕我直言。 – 2012-09-12 09:09:10

1

我还没有访问IE的atm,但我确定它支持推送。检查sendFormData被认为是一个数组:

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

别的东西IE喜欢做的事,就是告诉你有上发生错误后的行错误,所以它可能是form.serializeArray的一部分()行。

+0

嗯它回来为假。不知道为什么。就像我的意思是你看到的代码是我在我的js文件中。我评论了其他一切,只是为了确保。 – chobo2 2010-07-18 20:29:26

+0

第一部分回来的是什么?即Object.prototype.toString.call(sendFormData) 因为它通过函数生成,所以我不确定它是否会使用该方法显示函数 – Psytronic 2010-07-18 20:34:58

0

当然, 最简单的 另一个解决办法是做这样的事情:

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

我想我们不得不不同意在这里“最简单”的方式...这是更多的代码,不那么直观,并且*很多*更昂贵....我真的推荐反对这个,因为其他答案显示这个*不应该成为问题区域,这是一个简单的数组/对象操作。 – 2010-07-18 20:59:15

+0

好吧,也许不是最简单的,但它仍然可以解决问题。我同意不应该需要,他有什么应该工作,但如果由于某种原因他不能调试它,也有这个选择。我不明白它是如何不直观,看着它我可以看到到底发生了什么。但是,是的,开销会更大。 – Psytronic 2010-07-19 05:37:19

1

我想我有同样的问题;但最终发现我的问题是IE7-IE8没有实现Array.prototype.indexOf。但是,如果您想使用该功能,则可以转到此链接:indexOf