2011-01-06 12 views
5

निम्नलिखित साधारण से फ़ॉर्म पर विचार करें:जावास्क्रिप्ट/HTML फ़ॉर्म क्षेत्र नामकरण मुद्दा

<form method="GET" action="handle.php"> 
    <input type="hidden" name="action" value="search"> 
</form> 

फ़ॉर्म सबमिशन एक ajax कॉल में जावास्क्रिप्ट (IUI) द्वारा किया जाता है। सभी फ़ील्ड फॉर्म से ठीक से इकट्ठे होते हैं। जावास्क्रिप्ट तब AJAX कॉल को "form.action" भेजना चाहता है।

यह वह जगह है जहां मेरी समस्या शुरू होती है। ऑब्जेक्ट फॉर्म HTMLFormElement प्रकार का है। कार्रवाई फ़ॉर्म की प्रॉपर्टी टाइप स्ट्रिंग का होना चाहिए और इसमें "handle.php" होना चाहिए। कुछ घंटों के डिबगिंग के बाद, मैंने देखा कि फॉर्म.एक्शन अब HTMLInputElement प्रकार का है।

मेरा प्रश्न: क्या यह उचित जावास्क्रिप्ट व्यवहार है? मैं कभी भी फॉर्म प्रपत्र के नाम के साथ एक फॉर्म फ़ील्ड को परिभाषित नहीं करता था, ऐसा होगा। इस बीच मैंने अपने क्षेत्र को अलग-अलग नाम देकर इस मुद्दे को हल किया।

किसी भी सलाह के लिए अग्रिम धन्यवाद ...


मेरी समस्या को प्रदर्शित करने का एक आसान तरीका मिले।

<form action="test.php"> 
    <input type="hidden" name="action" value="test"> 
    <input type="button" onclick="alert(this.form.action);"> 
</form> 

और रूप है कि उचित है:: सबसे पहले समस्या के साथ प्रपत्र

<form action="test.php"> 
    <input type="hidden" name="NOT_AN_ATTRIBUTE_NAME" value="test"> 
    <input type="button" onclick="alert(this.form.action);"> 
</form> 

पहले में, पॉपअप राज्यों "[वस्तु HTMLInputElement]", दूसरी बार में: "http://localhost/test.php "।

+0

क्या आप जावास्क्रिप्ट कोड को भी – sunn0

+0

जोड़ सकते हैं, मुझे नहीं पता कि जेएस के लिए उचित है लेकिन ऐसा लगता है कि यह आपके द्वारा वर्णित तरीके से है, क्या इनपुट नाम को किसी अन्य नाम से इनपुट नाम बदलने के लिए बड़ा मुद्दा है? – Chris

+0

@ क्रिस: स्पष्ट रूप से मैंने इसे अपने क्षेत्र का नाम बदलकर हल कर लिया है। लेकिन AJAX कॉल में जावास्क्रिप्ट का उपयोग कर फॉर्म पोस्ट करते समय समस्या बनी हुई है। फॉर्म फ़ील्ड में फॉर्म विशेषता के समान नाम नहीं हो सकता है। – djBo

उत्तर

3

मुद्दा आप देख रहे हैं, क्योंकि रूपों जावास्क्रिप्ट में विशेष कर रहे हैं console.log उपयोग कर सकते हैं फ़ायरबग में अपने कंसोल सक्रिय करना होगा। उनके सभी फ़ील्ड गुणों के रूप में पहुंच योग्य हैं, इसलिए जब आप this.form.action का उपयोग करते हैं, तो यह फ़ील्ड क्रिया प्राप्त कर रहा है, HTML विशेषता action="test.php" नहीं।

alert(this.form.action); को alert(this.form.getAttribute('action')) बदलने के बजाय प्रयास करें।

+0

/मैथ्यू: getAttribute काम करने लगता है। यह इस तरह एक पूर्ण यूआरएल नहीं देता है .form.action करता है, लेकिन सौभाग्य से AJAX बहुत ज्यादा परवाह नहीं करता है। – djBo

0

यह बग के रूप में प्रतीत होता है। हो सकता है कि वहाँ 'कार्रवाई' के लिए एक सरणी

<form action="test.php"> 
    <input type="hidden" name="action" value="test"> 
    <input type="button" onclick="alert(this.form.action[0]);"> //the form action 
    <input type="button" onclick="alert(this.form.action[1]);"> // the text input 
</form> 
+0

यह काम नहीं करेगा। – Matt

+0

@ मैट: हां, समाधान के लिए इसका प्रस्ताव जिसे जावास्क्रिप्ट में ही शामिल किया जाना था। – Chris

0

अपने this.form.action अभी भी एक वस्तु है होना चाहिए। alert का उपयोग करने के बजाय इसे console.log(this.form.action) में डालें और फ़ायरबग और फ़ायरव्यूरी का उपयोग करके पता लगाएं कि आपके this.form.action में कौन सी घटनाएं/गुण हैं।

! आप इससे पहले कि आप

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