2010-05-25 13 views
51

cioè .:È valido avere due elementi di input con lo stesso nome?

<form 1> 
<input type="hidden" name="url" value="1"> 
</form 1> 

e

<form 2> 
<input type="hidden" name="url" value="2"> 
</form 2> 

È questo il ammessi e valida?

+0

Eventuali duplicati di [form HTML con più elementi di controllo nascosto con lo stesso nome] (http://stackoverflow.com/questions/452066/html-form-with-multiple-hidden-control-elements-of -lo stesso nome) –

risposta

32

Sì, nel tuo caso, è valido. Considerate questo:

Questo è un bene

<form name="form1"> 
    <input type="hidden" name="url" value="1"> 
</form> 

<form name="form2"> 
    <input type="hidden" name="url" value="2"> 
</form> 

questo non è buono

<form name="form1"> 
    <input type="hidden" name="url" value="1"> 
    <input type="hidden" name="url" value="2"> 
</form> 
+8

perché il voto negativo? –

+20

È valido. Non creerà confusione per il linguaggio lato server (anche PHP, con le sue convenzioni per i nomi dei campi che condividono un nome, gestirà in modo coerente e prevedibile più input che non usano quella convenzione). Non creerà confusione per JavaScript (che presenterà gli elementi come una raccolta e ** non ** ignorerà uno di essi). È/potrebbe/creare confusione per gli autori che scrivono codice senza sapere cosa stanno facendo, ma va bene per le specifiche. – Quentin

+0

@David Dorward: Grazie per averlo spiegato, ho rimosso quella parte. –

9

Sì.

Inoltre, è essenziale se si tratta di gruppi di pulsanti di opzione.

+0

Esattamente. O con le caselle di controllo, nel qual caso puoi mettere [] alla fine "url []" e crea una matrice da raccogliere. –

+2

@Kerry - Questo è un PHPism. La maggior parte delle librerie di manipolazione di forme sono abbastanza felici di non avere nomi speciali per gruppi di controlli. – Quentin

+0

Ah, buono a sapersi. –

8

Sì - ognuno verrà inviato solo con le rispettive forme.

Se li hai nella stessa forma, uno sostituirà l'altro e non è valido.

+10

Ti sbagli. Se si hanno più ingressi con lo stesso nome, uno * non * sostituisce l'altro. Tutti gli input verranno aggiunti al corpo della richiesta nell'ordine in cui appaiono in html. Ed è valido: [modulo HTML con più elementi di controllo nascosti con lo stesso nome] (http://stackoverflow.com/questions/452066/html-form-with-multiple-hidden-control-elements-of-the-same- nome) – Mahmoodvcs

+2

@Mahmoodvcs: questo non è assolutamente vero. Se il modulo è pubblicato su un servizio PHP, vince l'ultimo valore. Se desideri assegnare più valori a un nome, ogni nome deve terminare con "[]". –

+4

Qui stiamo parlando di HTML, non di PHP. – Mahmoodvcs

2

Per verificare se è valido o no, creat pagina di e test al W3C qui:

http://validator.w3.org/

+0

E spero che il validatore sia privo di bug :-) –

6

"Questo non è buono" analizza correttamente su ogni browser che conosco; se due url compaiono nella stringa codificata dell'URL, saranno trattati come una matrice. Prova questo in JQuery:

$('<form name="form1">\ 
    <input type="hidden" name="url" value="1">\ 
    <input type="hidden" name="url" value="2">\ 
</form>').serialize() 

e si otterrà: "url=1&url=2"

una query stringa di parser ben scritto restituirà una struttura di JSON come questo:

{"url":["1", "2"]} 

E 'rigorosamente spec? No, ma nessuno dei due sta creando una stringa multi-riga evadendo l'EOL con una barra rovesciata, come ho fatto sopra.

1
A) 

< form 1> 
< input type="hidden" name="url" value="1"> 
< /form 1> 

and 

< form 2> 
< input type="hidden" name="url" value="2"> 
< /form 2> 

is Okay,beacuse forms submiting time will be different 


B) 

< form 1> 
< input type="hidden" name="url" value="1"> 
< input type="hidden" name="url" value="2"> 
< /form 1> 
is also okay, but not standard coding practice 

JAVA Code two extract both values :: 

Map<String,String[]> parmMap = requestObj.getParameterMap(); 
String input1 = parmMap.get("url")[0]; 
String input2 = parmMap.get("url")[1]; 
Problemi correlati