2012-06-20 17 views
14

Ho una ragione valida per voler farlo, ma è una lunga storia quindi mi dimenticherò di cercare di spiegare perché e solo chiedere se è OK.È OK avere più moduli HTML con lo stesso nome?

Ho una pagina in cui è necessario disporre di più moduli con lo stesso nome, ma desidero solo il modulo di cui è necessario fare clic sul pulsante di invio. Ad esempio, il seguente potrebbe essere sulla mia pagina:

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

text 

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

text 

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

È accettabile?

+0

http://validator.w3.org – BalusC

+0

http://www.onlinewebcheck.com rileva errori di nomi di moduli duplicati nei documenti HTML5 –

+0

perché utilizzare 'nome del modulo 'a tutti: http://stackoverflow.com/questions/ 8946320/whats-the-point-of-html-forms-name-attribute –

risposta

15

Per quanto riguarda lo spec. HTML 4.01, è possibile utilizzare gli elementi form con lo stesso attributo name, poiché non è richiesto alcun obbligo di univocità. Fare così sconfigge lo scopo di tali attributi, però. Sono pensati per semplificare il riferimento ai moduli nello scripting lato client: se si dispone di <form name=foo>, quindi document.foo fa riferimento a tale modulo.

Non è definito cosa succede quando viene utilizzato lo stesso attributo name, ma ciò che i browser sembrano fare è restituire un array. Nell'esempio, document.foo sarebbe un array a 3 elementi, con document.foo[0] come prima forma. Ma questo non è utile, dal momento che (supponendo che non ci siano altri moduli nel documento) è possibile utilizzare document.forms[0], con un significato ben definito.

L'attributo name non è aggiornato per gli elementi form (ma non per i campi modulo, dove continua a essere essenziale). Il HTML 4.01 spec clause on form dice:

name = CDATA [CI] Questo attributo nomi l'elemento in modo che possa essere definito da fogli di stile o script. Nota. Questo attributo è stato incluso per la retrocompatibilità. Le applicazioni devono utilizzare l'attributo id per identificare gli elementi. "

Nelle bozze HTML5, anche le regole formali non consentono l'utilizzo dello stesso attributo name. Il numero HTML5 clause on the name attribute on form afferma che il suo valore "deve essere unico tra gli elementi form nella raccolta forms in cui si trova, se presente". Questa è una formulazione confusa, ma è più sicuro presumere che debba essere univoco all'interno degli elementi form di un documento.

+0

Il bit su document.foo per il caso in cui nomi di nomi multipli multipli non sono definiti, non è quella la sezione 3.1.4 Accessors dell'albero DOM da http://dev.w3.org/html5/spec/dom.html#dom-document -namedItem-che alla fine di 3.1.4 definisce? – Alohci

+0

@Alohci, non è definito nelle specifiche attuali. Le bozze HTML5 definiscono un meccanismo per questo, ma impone anche un requisito di univocità. –

+0

Sì, giusto punto. Le discussioni su cosa sia l'HTML 4, cos'è HTML5 e ciò che gli user-agent * fanno *, dato che non hanno modalità HTML 4 e HTML5 separate, a volte diventano molto complicate. – Alohci

10

Sì, è consentito, solo gli id devono essere unici. Non lo consiglierei comunque, perché anche metterti nelle condizioni di essere confuso lungo la strada.

L'attributo name definisce solo ciò che ciascun elemento del campo modulo verrà rappresentato quando inviato al server.

+5

L'attributo 'name' di un elemento' form' non ha effetto sui dati inviati al server.Potresti averlo confuso con gli attributi 'name' per i campi del modulo. –

0

Quando l'utente fa clic su un pulsante di invio, solo quel modulo sarà preso in azione. Tuttavia, dovrebbe essere meglio nominarli in modo da non essere confusi :)

1

È anche ok in HTML5. Solo il nome deve essere unico all'interno del modulo stesso.

Vedere i documenti: "Il valore non deve essere la stringa vuota e il valore deve essere univoco tra gli elementi del modulo dell'insieme di moduli in cui si trova, se presente."

+1

Potrebbe essere fuorviante. In HTML5, il [W3C richiede] (https://www.w3.org/TR/html5/forms.html#attr-form-name) ** il nome ** di un modulo per essere unico in una raccolta di moduli , se ce ne sono Ma gli elementi "nome's in una forma possono essere [qualsiasi stringa non vuota] (https://www.w3.org/TR/html5/forms.html#attr-fe-name) eccetto \ __ charset \ __ e _isindex_. – Qdeep

Problemi correlati