2010-07-18 129 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