2009-08-18 6 views
7

यह त्रुटि मैं यहाँ jQuery $(’form’).serialize() returns only one element of a form serialized में भाग जहां एक रूप टैग "तत्वों" का नाम दिया है, ताकि तरह से बहती है:jQuery में HTML फॉर्म टैग के लिए वैध/अमान्य नाम क्या हैं?

<form> 
<input name="elements"/> 
<input name="e2"/> 
</form> 

आप jQuery के $ के साथ प्रपत्र के सभी नामित तत्वों तक पहुंचने से रोकती ('प्रपत्र ')। serialize() (यानी आपको "तत्व =" मिलता है जहां आपको "तत्व = & ई 2 =" प्राप्त करना चाहिए)।

मैं फ़ॉर्म टैग के उचित "नाम" तत्वों के बारे में अधिक सामान्य जानकारी लेना चाहता हूं। अर्थात। ऑफ़-सीमा टैग ("तत्व", "नाम", आदि) क्या हैं, और नाम के लिए मान्य वर्ण क्या हैं। क्या ये चीजें मानक, या संदर्भ मैनुअल में परिभाषित हैं, या यह परीक्षण और त्रुटि है?

विचार और इनपुट की सराहना की।

पढ़ने के लिए धन्यवाद।

+1

एर ... यह सीडब्ल्यू क्यों है? – Macha

+0

@ माचा: यदि कोई व्यक्ति इसे साफ करने, इसे साफ़ करने, या संबंधित जानकारी जोड़ने (जैसे नामस्थान प्रश्नों को समान रूप से जोड़कर) में सुधार करना चाहता है। –

उत्तर

8

जोनाथन सैम्पसन ने कहा कि आपको फॉर्म ऑब्जेक्ट गुणों के लिए उपयोग किए जाने वाले नामों का उपयोग नहीं करना चाहिए। a list on Mozilla Developer Center है, जो आपको सावधानी से देखेंगे elements संपत्ति आपके लिए महत्वपूर्ण है क्योंकि फॉर्म तत्वों को फॉर्म ऑब्जेक्ट के प्रत्यक्ष विशेषताओं के रूप में उपयोग किया जा सकता है। आपके मामले में उदाहरण के लिए:

form.elements; // collides with the built-in elements property 
form.e2; 

इसलिए सावधान method, या action जो भी फ़ॉर्म एलीमेंट का method और action विशेषताओं के मूल्य के साथ भिड़ना होगा जैसे नामों के उपयोग करने के लिए नहीं किया जा। मुझे आशा है कि आपको विचार मिल जाएगा।

+0

कभी कभी मैं हंगेरी संकेतन का उपयोग जब प्रपत्र तत्वों नामकरण या मैं "first_name" जैसे कुछ अधिक वर्णनात्मक नाम का उपयोग करेगा। इस आरक्षित शब्द मुद्दों को रोकता है। – Buggabill

1

संख्याओं ("1Cow") से शुरू न करें, विराम चिह्न ("एकको !?") का उपयोग न करें, और रिक्त स्थान ("एक गाय") शामिल न करें।

ऐसे मामले हैं जहां आप स्क्वायर-ब्रैकेट का उपयोग कर सकते हैं [और] यदि आप एक PHP प्रोग्रामर हैं और एक ही नाम साझा करने वाले एकाधिक तत्वों से एक सरणी बनाना चाहते हैं।

<input name='colors[]' value='blue' /> 
<input name='colors[]' value='black' /> 
0

जहां तक ​​मुझे पता है जैसे कोई "सुरक्षित शब्द" देखते हैं हूँ, इसलिए मान्य वर्ण के बारे में मापदंड प्रदान की (कोई रिक्त स्थान, विराम चिह्न और अक्षर से प्रारंभ करना होगा) पूरा किया जाता है तो नाम विशेषता शामिल कर सकते हैं कुछ भी।

+0

हालांकि मैं नीचे निशान नहीं था, मुझे लगता है कि आप समझ में आ गया क्योंकि सवाल करते हुए कहा गया है कि वे jQuery फार्म प्लगइन के अपने उपयोग की वजह से एक नाम के रूप में 'तत्वों' का उपयोग नहीं कर सकता है,। आमतौर पर वहाँ नाम टैग के लिए किसी भी नामकरण परंपरा प्रतिबंध होता नहीं किया है के रूप में आप सूचित, लेकिन। –

+0

यह सच है। मुझे लगता है कि मैंने वास्तव में उस सवाल का जवाब नहीं दिया जो वह पूछ रहा था। :-( – tw39124

0

आपकी प्रारंभिक समस्या को देखते हुए मुझे संदेह है कि यह केवल परीक्षण और त्रुटि है, या पुस्तकालयों का गहरा ज्ञान है जिसका आप उपयोग कर रहे हैं (जो अवास्तविक हो सकता है)।

निश्चित रूप से, अल्फा वर्णों के साथ चिपके रहें, लेकिन अंत में संख्यात्मक जोड़ना ठीक होना चाहिए।

एएसपी.नेट में कई लोगों के लिए एक बगबियर जो नाम टैग पर डॉलर नोटेशन जोड़ता है, मदद कर सकता है, ताकि आप इसे आज़मा सकें। मैं निश्चित रूप से देखना चाहता हूं कि क्या होता है।

2

यदि आपका लक्ष्य जावास्क्रिप्ट में फॉर्म ऑब्जेक्ट के किसी भी संभावित पूर्व-मौजूदा गुणों के साथ विवाद से बचने के लिए है, तो मुझे लगता है कि आप जिस आधिकारिक मानक की तलाश कर रहे हैं वह दस्तावेज़ ऑब्जेक्ट मॉडल है। लेकिन यह है कि इन के विशाल बहुमत के लिए हानिरहित होगा

<html><body onLoad="showEm()"> 
<form id="foo"></form> 

<script> 
function showEm() { 
    for(var e in document.getElementById("foo")) { 
     document.writeln(e); 
     document.writeln("<br>"); 
    } 
} 
</script> 

<body> 
</html> 

नोट:

आप प्रयोग करें और देखें क्या एक रूप वस्तु का बिल्ट-इन गुण कोई वास्तविक broswer में हैं चाहते हैं, यह कोशिश "ओवरराइड" करने के लिए और मुझे यह भी यकीन नहीं है कि उनमें से सभी को ओवरराइड किया जा सकता है या नहीं।

6

डीओएम गुणों के संबंध में "अमान्य" नाम और "लिया" नामों के बीच यहां एक अंतर है।

जोनाथन सैम्पसन का जवाब "अमान्य" नामों को संबोधित करने के लिए अच्छा है, लेकिन आपके पिछले प्रश्न के आधार पर, आप क्या सोच रहे हैं कि "ले लिया" नाम है, जैसा कि "एक अन्य रूप में अन्य सभी डोम गुण क्या हैं नोड? "

संक्षिप्त उत्तर है: बहुत कुछ।

विस्तृत उत्तर मूल रूप से इन twolists की राशि है, जो कहते हैं "डोम गुण सभी नोड्स के लिए आम" और "डोम नोड्स के रूप में अद्वितीय गुणों"

बड़ा जिन्हें आप वास्तव में के बारे में चिंता करना चाहते है दूसरी सूची है - वे तोड़ सकते हैं कि आपका फॉर्म कैसे काम करना है।

3

बहुत कुछ है।

ये सभी वैध विधियां/गुण जो FORM तत्वों (इंटरफ़ेस विरासत के कारण) पर पाए जा सकते हैं, और उन सभी को समान नाम वाले फ़ील्ड द्वारा ओवरराइट किया जा सकता है। इसलिए, मैं इन नामों से बचने के लिए, आकस्मिक संघर्ष में चलाने के लिए नहीं सुझाव है:

Node interface members 

ELEMENT_NODE 
ATTRIBUTE_NODE 
TEXT_NODE 
CDATA_SECTION_NODE 
ENTITY_REFERENCE_NODE 
ENTITY_NODE 
PROCESSING_INSTRUCTION_NODE 
COMMENT_NODE 
DOCUMENT_NODE 
DOCUMENT_TYPE_NODE 
DOCUMENT_FRAGMENT_NODE 
NOTATION_NODE 
nodeName 
nodeValue 
nodeType 
parentNode 
childNodes 
firstChild 
lastChild 
previousSibling 
nextSibling 
attributes 
ownerDocument 
insertBefore 
replaceChild 
removeChild 
appendChild 
hasChildNodes 
cloneNode 
normalize 
isSupported 
namespaceURI 
prefix 
localName 
hasAttributes 

HTMLElement interface members 

id 
title 
lang 
dir 
className 

HTMLFormElement interface members 

elements 
length 
name 
acceptCharset 
action 
enctype 
method 
target 
submit 
reset 
item 
namedItem 

मैं भी एक test for these कुछ समय पहले किए गए, जो कि कैसे विभिन्न ब्राउज़रों इन नामों के साथ "व्यवहार करते हैं" परीक्षण करने के लिए अनुमति देता है।

+0

सभी अच्छे नाम। Hmph। Haha। धन्यवाद, Kangax। –

2

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

मैं कल्पना क्या पात्रों पर name tokens in HTML4 के लिए अनुमति दी जाती है, जो कहते हैं मिल गया है:

6,2 SGML बुनियादी प्रकार

...

  • आईडी और नाम टोकन शुरू होगा एक पत्र ([ए-ज़ा-जेड] के साथ) और उसके बाद किसी भी संख्या, अक्षरों ([0-9]), हाइफ़न ("-"), अंडरस्कोर ("_"), कोलन (":"), और अवधि ("।")।
+1

'' nAME'' SGML प्रकार के रूप में '' CDATA'' है, जो करने के लिए '' विशेषता name''! वास्तव में, यदि आप HTML 4 के लिए DTD को देखो, '' इनपुट पर name'' विशेषता परिभाषित किया गया है उल्लेख नहीं करता है बहुत अधिक उदार। –

2

प्राचीन सवाल, लेकिन अभी भी इस दिन के लिए लागू होता है ...

रूपों के साथ

, तो आप एक फार्म के संपत्ति से प्रति के रूप में एक ही नाम के साथ एक इनपुट नहीं हो सकता। कोई कठोर प्रतिबंध नहीं है, लेकिन जो कुछ भी आप करते हैं वह एक फॉर्म के गुणों को ओवरराइट करेगा। फॉर्म विशेषताओं की सूची व्यापक है, ब्राउज़र और जेएस इंजन द्वारा भिन्न होती है, और बिना किसी सूचना के किसी भी समय बदल सकती है। इसलिए एक स्थिर सूची का कोई उपयोग नहीं होगा।

किसी प्रपत्र का मूल्य मान उस विशेषता के समान नाम वाले किसी भी फ़ील्ड के संदर्भ के साथ अधिलेखित किया जाएगा। आईई: यदि आपके पास "एक्शन" नामक फ़ील्ड है, तो फॉर्म की एक्शन विशेषता "एक्शन" नामक उस तत्व के संदर्भ के साथ ओवरराइट की जाएगी। "एक्शन" नामक इनपुट के बिना: form.action एक यूआरएल है। "एक्शन" नामक इनपुट के साथ form.action एक तत्व है। यहां कुछ स्पष्टीकरण मिला: Why JS function name conflicts with element ID?। "नाम", "क्रिया" या "आईडी" फ़ॉर्म फ़ील्ड का पसंदीदा नाम हो सकता है, और जेएस दुनिया ने इसके लिए कभी जिम्मेदार नहीं ठहराया।

एक जे एस दुनिया के इस पूरा असफलता से बचाने नहीं है: यह बजाय असली प्रपत्र संपत्ति के मूल्य प्राप्त करने के लिए प्रपत्र वस्तु की getAttributeNode() विधि का उपयोग करने MSDN (http://msdn.microsoft.com/en-us/library/ie/ms536429%28v=vs.85%29.aspx) पर एक टिप्पणीकार से विख्यात है। एफएफ वर्तमान और आईई ~ 7 में काम करता है। इस विधि के साथ, आपके पास एक फॉर्म तत्व विशेषता के समान नाम वाला फ़ील्ड हो सकता है। यह एपीआई के साथ-साथ कई अन्य क्लाइंट प्रकारों की सेवा करने के लिए एचटीएमएल/जेएस प्रतिबंधों को रद्द करने की अनुमति दे सकता है।

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