2015-08-07 12 views
5

Capisco la semantica generale di un <fieldset>, insieme a come l'attributo name su un <fieldset> può essere utilizzato per dare un significato a un gruppo di input. Lo W3 wiki ha un numero di esempi con questo.Cosa fa l'attributo del nome dell'elemento fieldset?

Tuttavia, non riesco a capire quale sia l'attributo name sugli elementi <fieldset> durante l'invio di moduli. Secondo MDN, il name viene inviato con i dati del modulo. W3C indica anche che è per il nome dell'elemento, che viene utilizzato nell'invio del modulo.

Quando si prova l'attributo name su un <fieldset>, tuttavia, non vedo che venga inviato con il resto dei dati del modulo. Non è chiaro per me se ha un uso diverso dalla semantica.

L'attributo sugli elementi <fieldset> deve essere inviato con i dati del modulo? Se sì, ha un valore? Che cosa fa?

+0

Questo è piuttosto una buona domanda. Perché mai il campo ha bisogno di un attributo nome ... –

+0

Come la maggior parte degli attributi "nome" sui componenti del modulo, generalmente lo uso per distinguere tra elementi del modulo dello stesso tipo. Per esempio. Differenziazione tra due diversi ambiti dopo la presentazione. – Tyler

+1

@Tyler - Come si fa a distinguere tra i campi dopo l'invio quando il nome del fieldset non appare nel payload inviato nell'invio? – Quentin

risposta

2

Tuttavia, non capisco cosa attribuisca l'attributo nome sugli elementi <fieldset> durante l'invio dei moduli.

Niente.

aver testato da soli:

quando si cerca l'attributo nome su un <fieldset>, però, non vedo che venga presentato con il resto dei dati del modulo.

sembra essere un errore nella sintesi della specifica (presumibilmente copiato da input ad un certo punto) che è stato copiato sul riferimento MDN.

Il rules for form submission non menziona i set di campi.

W3C indica anche che è per il nome dell'elemento, che viene utilizzato nell'invio del modulo.

La citazione completa è:

nome - Nome di controllo di modulo da utilizzare per la scheda di iscrizione e nel form.elements API

Il form.elements API (insieme con le API DOM generiche come getElementsbyName) è l'unico posto in cui l'attributo ha un effetto effettivo.

2

Questo è un po 'strano per me, ma sembra che lo scopo sia così che è possibile accedervi tramite myForm.elements come se fosse possibile qualsiasi altro elemento del modulo. I set di campi hanno una certa rilevanza per il funzionamento del modulo (ad esempio, making a fieldset "disabled" si applicherà a tutti i controlli relativi ai moduli figlio), quindi suppongo che questo sia qualcosa che uno sviluppatore potrebbe voler fare.

Sono abbastanza sicuro che è l'unico uso per questo.I set di campi non possono avere un valore (anche se ne imposti uno, il tuo browser dovrebbe ignorarlo e non inviarlo), quindi non verrà mai incluso in ciò che viene inviato al server.

Ecco un piccolo test che ho fatto cercando di capire questo:

var fruitform = document.getElementById("fruitform"); 
 
var output = document.getElementById("output"); 
 

 
function log(msg) { 
 
    output.innerHTML = output.innerHTML + "\n" + msg; 
 
} 
 

 
log("*** fruitform.elements ***") 
 
log(JSON.stringify(fruitform.elements)); 
 
log("");
<h2>test form</h2> 
 
<!-- the 'action' url' is just a page that outputs any GET parameters you pass to it --> 
 
<form action="http://www.w3schools.com/html/action_page.php" id="fruitform"> 
 
    <fieldset name="facts"> 
 
    type: 
 
    <input type="text" name="type" value="banana"> 
 
    <br><br> 
 
    color: 
 
    <input type="text" name="color" value="yellow"> 
 
    </fieldset> 
 
    <br> 
 
    <input type="submit"> 
 
</form> 
 

 
<!-- place to put some output --> 
 
<h2>output</h2> 
 
<pre id="output"> 
 
</pre>

(here's the same demo on codepen)