86 votes

fermeture du problème de balise d'entrée HTML

Je me demande pourquoi le HTML <input> balises à ne pas avoir une balise de fermeture comme les autres balises HTML et ce serait aller mal si nous ne fermer la balise d'entrée ?

J'ai essayé sur Google et j'ai trouvé le standard pour écrire une balise d'entrée comme c' <input type="text" name="name"> pas de fermeture avec un </input>.

Personnellement, je me sentais le problème lorsque j'ai créé une balise d'entrée pour Radio boutons à l'aide de

var DOM_tag = document.createElement("input");

Cela créé un bouton radio, mais l' TextNode j'ai ajouté le bouton radio avec

document.createTextNode("Radio Label");

ne fonctionne pas. Il indique simplement le bouton radio n' Radio Label comme dans ce cas. Si je peux voir le code complet

<input id="my_id" type="radio" name="radio_name">Radio Label</input>

Quelqu'un peut-il expliquer s'il vous plaît ?

PS : Le principal problème qui s'est produit pour moi, c'est la fermeture automatique des balises d'entrée comme je l'ai mentionné dans la question, je suis en utilisant var DOM_tag = document.createElement("input"); ce qui crée automatiquement une balise de fermeture. que dois-je faire à ce sujet ?

131voto

BoltClock Points 249668

Ces sont nuls éléments. Cela signifie qu'ils ne sont pas conçus pour contenir du texte ou d'autres éléments, et en tant que tel n'a pas besoin d'une balise de fermeture.

Cependant, ils peuvent avoir un <label> associés:

<input id="my_id" type="radio" name="radio_name">
<label for="my_id">Radio Label</label>

Boutons Radio, par nature, ne peut pas contenir de texte, de toute façon, ça n'aurait pas de sens pour eux d'accepter de texte ou d'autres éléments de contenu. Autre question, avec un contrôle qui n'acceptent texte en entrée: le contenu textuel alors sa valeur, soit son étiquette? Pour éviter toute ambiguïté, nous avons une <label> élément qui fait exactement ce qu'il indique sur l'étain, et nous avons un value attribut désignant un contrôle de saisie de la valeur.

Notez que le HTML ne vous oblige pas à fermer explicitement une balise d'élément vide. En fait, les balises de fermeture comme </input> ne sont pas valide en HTML. XHTML est différent; par des règles XML, chaque balise doit être ouvert et fermé; cela se fait avec la syntaxe raccourcie au lieu d'un </input> balise:

<input id="my_id" type="radio" name="radio_name" />
<label for="my_id">Radio Label</label>

17voto

Jukka K. Korpela Points 71599

L'origine est dans le vide de l'élément de concept en SGML, et l'idée était que certains éléments agissent comme des espaces réservés pour le contenu qui sera inséré à partir d'une source externe ou par l'environnement. C'est pourquoi, img et input, par exemple, ont été déclarés comme vide en HTML, ou, plus exactement, comme ayant VIDES de contenu déclaré (c'est à dire aucun contenu n'est peut-être, que face à des éléments qui juste par hasard a vide de contenu). Pour une explication plus complète, voir ma page Vide éléments SGML, HTML, XML et XHTML.

L'implication est que la balise de départ pour un tel élément agit comme balise de fermeture, trop. Logiciel de processus de SGML ou HTML, documents est censé connaître à partir de la Définition de Type de Document (DTD) des étiquettes qui ont cette propriété. Dans la pratique, ces informations sont intégrées dans les navigateurs web. À l'aide d'une balise de fin, comme </input> n'est pas valide, mais les navigateurs, sautez simplement méconnu ou fausse balise de fin.

En XML, donc en XHTML, les choses sont différentes, parce que le XML est une variante simplifiée de SGML, destinées à être traitées d'une manière simpliste. Logiciel de processus de XML doit être en mesure de faire l'analyse sans DTD, de sorte XML nécessite des balises de fermeture pour tous les éléments, mais vous pouvez (et, pour la compatibilité, la plupart doit) utiliser une syntaxe spéciale, comme <input /> raccourci pour <input></input>. Mais le XHTML permet toujours pas de contenu entre les balises.

Si vous ne pouvez pas spécifier l'étiquette d'un élément d'entrée à l'intérieur de l'élément lui-même, comme il ne peut pas avoir n'importe quel contenu. Vous pouvez utiliser l' title, value, ou (en HTML5) placeholder attributs d'associer des textes avec elle, en des sens différents, mais normalement le contenu visible qu'une étiquette, il doit être dans un élément différent. Comme décrit dans les autres réponses, il est conseillé de le mettre dans un label élément et définir l'association avec id et for attributs.

10voto

Xyon Points 365

<input> est une balise vide, qu'il n'est pas conçu pour avoir tout contenu ou une balise de fermeture. Pour la conformité, vous pouvez indiquer la fin de la balise comme ceci:

<input type="text" value="blah" />

qui est le XHTML conforme façon de fermer une balise qui n'a pas de contenu. Il en va de même pour l' <img> balise.

L'étiquette d'un bouton radio, vous êtes probablement mieux de l'aide de l' <label> balise comme BoltClock réponse décrit.

0voto

Asad Points 22968

Vous pouvez utiliser

var label = document.createTextNode("Radio Label");
DOM_tag.parentElement.insertBefore(label,DOM_tag);

mettre l'étiquette à côté du bouton radio.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X