2011-09-15 11 views
7

मुझे आईआईएस एक्सप्रेस का उपयोग कर अपने एक्सपी सिस्टम पर स्थानीय रूप से चल रहे एएसपी.NET साइट मिल गई है। विंडोज सर्वर पर चल रही साइट का एक लाइव संस्करण है।"document.formName" अपरिभाषित है?

वेब पृष्ठों में, अक्सर जावास्क्रिप्ट शैली document.formName का उपयोग कर पृष्ठ पर एक फॉर्म का संदर्भ देगा, जहां formName फ़ॉर्म का नाम है। जहां तक ​​मुझे पता है, यह document.forms.formName और document.forms[0] और आगे के साथ एक क्रॉस-ब्राउज़र विधि है।

मेरी स्थानीय विकास साइट पर, संदर्भ document.frm1 (मुझे पता है, खराब नामकरण अभ्यास) त्रुटियां बाहर; यह अपरिभाषित है। दूसरी तरफ, document.forms.frm1 ठीक काम करता है। आश्चर्यजनक रूप से, यह सर्वर पर नहीं होता है, हालांकि दोनों पृष्ठ समान हैं जैसे कोड जाता है। मैं डबल Firebug की जांच कर चुके हैं, और दोनों IE8 और Firefox 6.

में एक और अजीब हिस्सा: Firebug के साथ जाँच, document.frm1 अपरिभाषित है, लेकिन document.frmClose (एक और फार्म) मौजूद है! हुह ?!

किसी ने भी इससे पहले अनुभव किया है?

+0

यह सब दर्द जब आप एक फ्लैश में पार ब्राउज़र और पार मंच हो सकता है क्यों का उपयोग कर प्रपत्र टैग में संपत्ति JQuery? उदाहरण के लिए: $ ('# myForm') आपको सभी ब्राउज़रों में फॉर्म ... देना चाहिए। –

+0

क्या हम HTML देख सकते हैं? ... लगता है जैसे आपके पास कुछ अमान्य HTML है। –

+1

@ डेविड पाइरास - आप सुझाव देते हैं कि वह 'दस्तावेज़.getElementById' पहले से ही क्या करने के लिए जावास्क्रिप्ट (jQuery) की हजारों लाइनों को जोड़ता है? अपनी परियोजना में केवल ढांचे को जोड़कर जो मानक कार्यक्षमता को डुप्लिकेट करते हैं, उन्हें हानिकारक माना जाता है। –

उत्तर

12

संपादित करें 1

मैं कुछ प्रयोग किया था, और पाया कि id संपत्ति, document.forms के लिए प्रयोग किया जाता है, जबकि name संपत्ति document.formName

http://jsfiddle.net/GVjsv/


के लिए इस्तेमाल किया जा रहा है मूल उत्तर

सुनिश्चित करें कि आपका जावास्क्रिप्ट डीओएम तैयार होने से पहले निष्पादित नहीं कर रहा है। एक तरह से मदद करने के लिए पृष्ठ के तल पर अपने जावास्क्रिप्ट डाल करने के लिए है, या आप एक रूपरेखा उपयोग कर रहे हैं एक ready प्रकार समारोह में कोड रैप करने के लिए सुनिश्चित हो:

jQuery: http://api.jquery.com/ready/

Mootools: http://mootools.net/docs/core/Utilities/DomReady

वेनिला जावास्क्रिप्ट:

window.onload = function() { 
    // Code to be run. 
} 

कारण यह है कि इस हो सकता है कि स्थानीय विकास सर्वर को लाइव se तुलना में अधिक तेजी पृष्ठ लोड सर्वर के बीच असंगत है rver करता है। समय काम करता है ताकि आप आमतौर पर दोनों स्थानों में एक ही त्रुटि न पाएं - जोर जोड़ा जाता है क्योंकि यदि आपने पर्याप्त समय की कोशिश की है, तो आप शायद दोनों स्थानों में त्रुटि को पुन: पेश कर पाएंगे।

+0

एकमात्र चीज है, भले ही यह त्रुटि हो रही हो क्योंकि डीओएम तैयार नहीं है, पेज लोड होने के बाद मैं फ़ायरबग के साथ गया, और 'document.frm1' अभी भी अपरिभाषित था, जबकि' document.forms.frm1' ने काम किया था। क्या जावास्क्रिप्ट त्रुटि डीओएम को पूरी तरह लोड होने से रोक देगी? – voithos

+0

संपादन देखें, मुझे बताएं कि क्या frm1 में 'आईडी' और' NAME' संपत्ति दोनों हैं। जैसा कि आप jsFiddle में देखते हैं, अगर नाम संपत्ति छोड़ी जाती है तो 'document.formName' काम नहीं करेगा। –

+0

इसके लिए धन्यवाद। यह एक दिलचस्प व्यवहार है। हालांकि, वास्तव में, 'आईडी' और 'नाम' मान दोनों सेट हैं। मैं सर्वर पर कुछ प्रयोग करूँगा, यह देखने के लिए कि क्या मैं किसी भी तरह से त्रुटि को पुन: उत्पन्न कर सकता हूं। कोड में वास्तव में ** नहीं ** अंतर है। यह सर्वर और स्थानीय रूप से समान है। सर्वर बस त्रुटि नहीं करता है। – voithos

3

मैं जावास्क्रिप्ट पहचान उद्देश्यों के लिए नाम विशेषता का उपयोग न करने की अनुशंसा करता हूं। इसके बजाय, तत्व को एक आईडी दें और

document.getElementById("elementId"); 

उदा।

<form id="form1"></form> 
<script> 
    var form = document.getElementById("form1"); 
</script> 
+0

पुरानी फैशन जावास्क्रिप्ट, JQuery या अन्य क्रॉस ब्राउज़र जेएस पुस्तकालय उपयोगी और नि: शुल्क और उपलब्ध हैं :) –

+3

कुछ अधिक फैंसी सामान (getElementsByClassname, आदि) सभी ब्राउज़रों में काम नहीं कर सकते हैं, लेकिन GetElementById प्रत्येक प्रमुख ब्राउज़र AFAIK में काम करता है। मुझे jQuery पसंद है ... जब इसकी आवश्यकता होती है। लेकिन इसकी हमेशा आवश्यकता नहीं होती है, और यह मुझे Google होस्टेड संस्करण के लिए यूआरएल देखने या मेरे कोड को डाउनलोड करने के लिए एक मिनट है, जब मैं 'ज़ोन' में हूं तो मैं अपने प्रवाह में बाधा डाल रहा हूं। किसी पृष्ठ पर वजन जोड़ने के कुछ भी नहीं कहने के लिए जब इसकी आवश्यकता नहीं होती है। – Asmor

+0

सही, क्षमा करें अगर मैंने थोड़ा बुरा शिक्षक सुनाया ;-) –

6

नाम प्राप्त करने के लिए विशेषता अपने रूप तत्व आप जोड़ने की जरूरत को जोड़ा गया ...

<system.web> 
    <pages controlRenderingCompatibilityVersion="3.5" /> <!-- http://www.asp.net/whitepapers/aspnet4/breaking-changes --> 
</system.web> 

... अपने web.config

+0

धन्यवाद, यह मेरे लिए किया था। मेरे पास कुछ पुरानी जावास्क्रिप्ट के साथ एक मौजूदा साइट थी जो दस्तावेज़ का उपयोग कर रही थी। Form1.someTextField.value। और मैंने web.config फ़ाइल को वापस घुमाने के बाद काम करना बंद कर दिया था। –

0

इस लिए सबसे अच्छा समाधान करने के लिए नीचे है:
बस प्रपत्र टैग में एक नाम संपत्ति जोड़ने


यदि आप नीचे कोड

का उपयोग कर रहे हैं
<form id="form1"></form> 
<script> 
    var form = document.form1; //getting undefined error here 
</script> 

तुम यहाँ करने की आवश्यकता क्या है:
ऐड "नाम" की तरह नीचे

<form id="form1" name="form1"></form> 
<script> 
var form = document.form1; //Now it will work fine and provide the correct value 
</script> 
संबंधित मुद्दे