2010-07-18 14 views
6

मैं एक serializeArray (jquery से) में एक कुंजी/मान जोड़ी डालने का प्रयास कर रहा हूं।आईई 8 पुश का समर्थन नहीं करता है?

तो मैं जैसे

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

कुछ फ़ायरफ़ॉक्स में इस आईई 8 में अभी तक काम करता है मैं

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

तो यह इस लाइन की ओर इशारा करते प्रतीत हो रहा है है। तो क्या 8 या तो पुश का समर्थन नहीं करता है, तो एक तरीका है कि मैं एक कुंजी/मूल्य जोड़ी जोड़ सकता हूं जो सभी ब्राउज़रों में काम करेगा (5 मुख्य फ़ायरफ़ॉक्स, यानी 8, क्रोम, ओपेरा, सफारी)

+2

आपने एक उत्तर स्वीकार कर लिया लेकिन यह नहीं बताया कि आपका कोड क्यों टूट रहा था ... मैं उत्सुक हूँ! –

+0

मुझे आईई 8 में एक ही समस्या थी जो एक भ्रामक त्रुटि संदेश और स्टैक ट्रेस बन गया। आपको आईई 8 कोड में सभी तरह से पता लगाना होगा, या यह कुछ परेशान चीजें कर सकता है ... –

उत्तर

11

क्या आप काम करता है (यहां तक ​​कि आईई 8 में), आप इसे यहां देख सकते हैं: http://jsfiddle.net/ZAxzQ/

सवाल यह है कि आप उस त्रुटि :)

.push() प्राप्त करने के लिए कर रहे हैं किया गया चारों ओर जब तक Array वस्तु के रूप में, मैं कभी एक ब्राउज़र कि समर्थन नहीं करता है देखा है है के बाहर कुछ होना चाहिए यह ... आपकी असमर्थित त्रुटि में कुछ और से आने के लिए है।

1

यह एक नहीं है इस प्रकार

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

ऊपर भी जा फिर से लिखा जा सकता है:: संपूर्ण जवाब यह आपकी समस्या का समाधान के रूप में नहीं है, लेकिन Array.push() विधि IE8 में काम करता है

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

दूसरा तरीका आईएमएचओ लिखने का एक बहुत ही अजीब तरीका है। –

1

मुझे आईई एटीएम तक पहुंच नहीं मिली है, लेकिन मुझे यकीन है कि यह पुश का समर्थन करता है। जाँच करें कि sendFormData एक सरणी माना जाता है:

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

कुछ बाकी आईई करने के लिए पसंद करती है, आपको बता वहाँ पंक्ति के बाद त्रुटि हुई पर कोई त्रुटि है, तो यह form.serializeArray का हिस्सा हो सकता() लाइन है ।

+0

हम्म यह झूठी के रूप में वापस आता है। यकीन नहीं है कि क्यों। जैसे मेरा मतलब है कि जो कोड आप देखते हैं वह मेरे जेएस फ़ाइल में है। मैंने यह सुनिश्चित करने के लिए बस बाकी सब कुछ टिप्पणी की। – chobo2

+0

केवल पहला भाग वापस क्या आता है? यानी Object.prototype.toString.call (sendFormData) जैसा कि यह किसी फ़ंक्शन के माध्यम से जेनरेट हो रहा है, मुझे यकीन नहीं है कि यह उस विधि का उपयोग करके फ़ंक्शन दिखाएगा – Psytronic

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

मुझे लगता है कि हमें "सबसे आसान" तरीका क्या है इस पर असहमत होना होगा ... यह अधिक कोड, कम सहज, और एक * बहुत * अधिक महंगा है .... मैं वास्तव में इसके खिलाफ अनुशंसा करता हूं, क्योंकि अन्य उत्तरों यह दिखाते हैं * किसी भी समस्या क्षेत्र को नहीं होना चाहिए, यह एक साधारण सरणी है/ऑब्जेक्ट ऑपरेशन। –

+0

ठीक है, शायद सबसे आसान नहीं है, लेकिन यह अभी भी समस्या का समाधान करेगा। मैं मानता हूं कि इसकी आवश्यकता नहीं होनी चाहिए, उसे क्या काम करना चाहिए, लेकिन यदि किसी भी कारण से वह इसे डीबग नहीं कर सकता है, तो यह विकल्प भी है। मैं नहीं देखता कि यह कम सहज कैसे है, इसे देखकर मैं देख सकता हूं कि क्या हो रहा है। लेकिन हाँ, इसके लिए ओवरहेड बड़ा होगा। – Psytronic

1

मैंने सोचा कि मैं एक ही समस्या थी, लेकिन यह पता चला कि मेरी समस्या यह थी कि आईई 7-आईई 8 ने Array.prototype.indexOf को लागू नहीं किया था। यदि आप इसका उपयोग करना चाहते हैं, हालांकि, आप इस लिंक पर जा सकते हैं: indexOf

संबंधित मुद्दे