2009-08-18 5 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() (즉, "elements ="로 "elements = & e2 ="를 얻을 수 있습니다.

양식 태그의 올바른 "이름"요소에 대한 일반적인 정보를 원합니다. 나는. 출입 금지 태그 ("요소", "이름"등) 및 이름에 유효한 문자는 무엇입니까? 이러한 것들이 표준 또는 참조 매뉴얼에 정의되어 있습니까, 아니면 시행 착오입니까?

생각과 의견을 감사드립니다.

읽어 주셔서 감사합니다.

+1

오류 ... 왜이 CW입니까? – Macha

+0

@Macha : 질문을 개선하고 싶거나, 정리하거나, 관련 정보를 추가하려는 경우 (예 : 유사 네임 스페이스 질문 추가). –

답변

8

요나단 샘슨 (Jonathan Sampson)이 양식 객체 속성에 사용 된 이름을 사용하면 안된다고 말한 것 외에. a list on Mozilla Developer Center이 있습니다. 양식 요소의 직접 속성으로 양식 요소에 액세스 할 수 있기 때문에 신중하게보고 싶은 경우 elements 속성이 중요합니다. 귀하의 경우 예를 들어 :

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

그래서 또한 폼 요소의 methodaction 속성 값과 충돌합니다 method, 또는 action 같은 이름을 사용하지 않도록주의해야합니다. 네가 그 아이디어를 얻길 바랍니다.

+0

가끔 양식 요소의 이름을 지정할 때 헝가리 표기법을 사용하거나 "first_name"과 같이 좀 더 자세한 설명이 포함 된 이름을 사용하기도합니다 (예 : – Buggabill

1

숫자 ("1Cow")로 시작하지 말고 문장 부호 ("oneCow !?")를 사용하지 말고 공백 ("한 마리의 암소")을 포함하지 마십시오.

PHP 프로그래머 인 경우 대괄호 [및]를 사용하여 동일한 이름을 가진 여러 요소에서 배열을 만들려는 경우가 있습니다.

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

는 지금까지 내가 같은 더 "예약 된 단어"가없는 알고 있어요로서, 그럼 이름 속성이 포함될 수 있습니다 충족 유효한 문자에 대한 기준을 제공 (공백, 문장 부호 및 문자로 시작해야합니다) 아무것도.

+0

jQuery 양식 플러그인을 사용했기 때문에 '요소'를 사용할 수 없다는 질문이 있었기 때문에 나는 그 것을 표시하지 않았다. 그러나 일반적으로 당신이 암시 한 것처럼 이름 태그에 대한 명명 규칙 제한이 없었을 것입니다. –

+0

사실입니다. 나는 그가 묻고있는 질문에 정말로 대답하지 않았다고 생각한다. :-( – tw39124

0

당신의 초기 문제가 주어지면 나는 단지 시행 착오, 또는 당신이 사용하고있는 라이브러리에 대한 깊은 지식 (이것은 비현실적 일 수 있습니다)이 의심됩니다.

분명히 알파 문자가 붙어 있지만 숫자 끝에 숫자를 추가하는 것이 좋습니다.

이름표에 달러 표기법을 추가하는 ASP.NET의 많은 사람들에게 버그 베어가 도움이 될 수 있으므로 시도해 볼 수 있습니다. 나는 어떤 일이 일어나는지 확실히 알고 싶다.

2

목표가 자바 스크립트에서 양식 객체의 가능한 기존 속성과 충돌하는 것을 피하려면 사용자가 찾고있는 공식 표준이 문서 객체 모델이라고 생각합니다.

당신이 실험 양식 개체의 기본 속성이 진짜이 broswer에서 무엇을보고 싶다면

,이 시도 :

<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> 

참고 그러나 이들의 대부분은 당신을 위해 해가 될 것이라고 "오버라이드 (override)"하고 나는 모든 것이 오버라이드 될 수 있는지 확신하지 못한다.

6

DOM 속성과 관련하여 "잘못된"이름과 "가져온"이름 사이에는 차이점이 있습니다.

조나단 샘슨 (Jonathan Sampson)의 대답은 "잘못된"이름을 처리하는 데 도움이되지만 이전 질문을 바탕으로 양식에있는 다른 DOM 속성은 모두 "촬영 된"이름을 묻는 것입니다. 마디?"

짧은 대답은 다음과 같습니다.

는 긴 대답은 기본적으로 말하고 "노드를 형성하는 독특한 DOM 속성"

당신이 정말로에 대해 걱정 할 큰 사람 "모든 노드에 공통 DOM 속성"하는 것입니다 이러한 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

모두 좋은 이름입니다.) 감사합니다, Kangax. –

2

유용한 답변을 보내 주신 모든 분들께 감사드립니다. 대답은 DOM에있는 것, 사용되지 않아야하는 것 (예 : '요소'등)에 맞게 조정 된 것 같습니다. 질문의 다른 부분은 허용되는 문자입니다.

내가 말한다 name tokens in HTML4을 위해 허용되는 문자 사양, 발견했습니다

6.2 SGML 기본 유형

을 ...

  • ID와 이름 토큰을 시작해야합니다 숫자 ([0-9]), 하이픈 ("-"), 밑줄 ("_"), 콜론 (":") 및 마침표 (".")가 있습니다.
+1

" NAME'' SGML 형식은''name'' 속성을 참조하지 않습니다! 실제로 HTML 4의 DTD를 보면 input의''name'' 속성은''CDATA''로 정의됩니다. 훨씬 관대 한. –

2

고대의 질문은, 그러나 아직도이 일에 적용 ... 형태로

, 당신은 양식 속성 자체와 동일한 이름을 가진 입력을 가질 수 없습니다. 어려운 제한은 없지만, 무엇을 하든지 서식의 속성을 덮어 씁니다. 양식 속성 목록은 광범위하며 브라우저 및 JS 엔진에 따라 다르며 사전 통보없이 언제든지 변경 될 수 있습니다. 따라서 정적 목록은 쓸모가 없습니다.

양식의 속성 값은 해당 특성과 이름이 같은 필드에 대한 참조로 덮어 쓰여집니다. IE : "action"이라는 필드가 있으면 양식의 action 속성이 "action"이라는 요소에 대한 참조로 덮어 쓰여집니다. "action"이라는 입력이 없으면 : form.action은 URL입니다. "동작"이라는 입력을 사용하면 form.action이 하나의 요소입니다. 여기에 몇 가지 설명이 있습니다 : Why JS function name conflicts with element ID?. "name", "action"또는 "id"가 양식 필드의 기본 이름 일 수 있으며 JS 세계는이를 결코 설명하지 않습니다.

는이 JS 세계의 완전한 실패에서 저장할 수 있습니다 : 대신 실제 형태의 속성 값을 얻을 수있는 폼 객체의 getAttributeNode() 방법을 사용하는 MSDN (http://msdn.microsoft.com/en-us/library/ie/ms536429%28v=vs.85%29.aspx)에 주석에 의해 알 수있다. FF 전류 및 IE ~ 7에서 작동합니다. 이 메소드를 사용하면 양식 요소 속성과 동일한 이름의 필드를 가질 수 있습니다. 이것은 다른 여러 클라이언트 유형을 동시에 제공하는 API에서 HTML/JS 제한을 분리 할 수 ​​있어야합니다.

관련 문제