2010-05-25 3 views
51

i.e. .:Est-il valide d'avoir deux éléments d'entrée avec le même nom?

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

et

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

Est-ce permis et valide?

+0

double possible de [formulaire HTML avec plusieurs éléments de commande cachée du même nom] (http://stackoverflow.com/questions/452066/html-form-with-multiple-hidden-control-elements-of -le-même-nom) –

Répondre

32

Oui, dans votre cas, c'est valide. Considérez ceci:

Ce qui est bon

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

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

Ce n'est pas bon

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

pourquoi le vote vers le bas? –

+20

C'est valide. Cela ne créera aucune confusion pour le langage côté serveur (même PHP, avec ses conventions pour nommer les champs qui partagent un nom, traitera de manière cohérente et prévisible plusieurs entrées qui n'utilisent pas cette convention). Cela ne créera aucune confusion pour JavaScript (qui présentera les éléments comme une collection et ** n'en ** ignorera pas l'un d'entre eux). Il/pourrait/créer de la confusion pour les auteurs qui écrivent du code sans savoir ce qu'ils font, mais cela convient à la spécification. – Quentin

+0

@David Dorward: Merci d'avoir expliqué cela, j'ai supprimé cette partie. –

9

Oui.

Plus, il est essentiel si vous avez affaire à des groupes de boutons radio.

+0

Exactement. Ou avec des cases à cocher, auquel cas vous pouvez mettre [] à la fin "url []" et cela crée un tableau à ramasser. –

+2

@Kerry - C'est un PHPism. La plupart des bibliothèques de gestion de formulaires sont très heureuses de ne pas avoir de noms spéciaux pour les groupes de contrôles. – Quentin

+0

Ah, c'est bon à savoir. –

8

Oui - chacun d'entre eux se présentera avec son formulaire respectif.

Si vous les avez dans le même formulaire, l'un remplacera l'autre et il n'est pas valide.

+10

Vous avez tort. Si vous avez plusieurs entrées avec le même nom, l'une ne remplacera pas l'autre. Toutes les entrées seront ajoutées au corps de la requête dans l'ordre où elles apparaissent en html. Et c'est valide: [formulaire HTML avec plusieurs éléments de contrôle cachés du même nom] (http://stackoverflow.com/questions/452066/html-form-with-multiple-hidden-control-elements-of-the-same- name) – Mahmoodvcs

+2

@Mahmoodvcs: Ceci n'est pas strictement vrai. Si le formulaire est envoyé à un service PHP, la dernière valeur est gagnante. Si vous souhaitez attribuer plusieurs valeurs à un nom, chaque nom doit se terminer par '[]'. –

+4

Nous parlons de HTML ici, pas de PHP. – Mahmoodvcs

2

Pour tester si elle est valide ou non, creat vous la page et le test du W3C ici:

http://validator.w3.org/

+0

Et j'espère que le validateur est sans effigie :-) –

6

"This is Not Good" analyse correctement tous les navigateurs que je connais; Si deux URL apparaissent dans la chaîne encodée par l'URL, elle sera traitée comme un tableau. Essayez ceci dans JQuery:

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

et vous obtiendrez: "url=1&url=2"

un analyseur de chaîne de requête bien écrit retournera une structure JSON comme ceci:

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

est-il strictement spec? Non, mais ni l'un ni l'autre ne crée une chaîne multi-lignes en échappant à l'EOL avec un backslash, comme je l'ai fait ci-dessus.

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]; 
Questions connexes