17 Formulários

Índice

  1. Introdución aos formulários
  2. Contróis
    1. Tipos de contróis
  3. O elemento FORM
  4. O elemento INPUT
    1. Tipos de contróis creados con INPUT
    2. Exemplos de contróis que conteñen controis INPUT
  5. O elemento BUTTON
  6. Os elementos SELECT, OPTGROUP, e OPTION
    1. Opcións pré-seleccionadas
  7. O elemento TEXTAREA
  8. O elemento ISINDEX
  9. Etiquetas
    1. O elemento LABEL
  10. Adicionar-lle estrutura aos formulários: os elementos FIELDSET e LEGEND
  11. Dar-lle foco a un elemento
    1. Navegación co tabulador
    2. Teclas de aceso
  12. Contróis desactivados e de só leitura
    1. Contróis desactivados
    2. Contróis de só leitura
  13. Envio de formulários
    1. Método de envio de formulários
    2. Contróis exitosos
    3. Procesamento dos dados de formulário
    4. Tipos de conteúdos dos formulários

17.1 Introdución aos formulários

Un formulário HTML é unha sección dun documento que contén conteúdo normal, código, elementos especiais chamados contróis (recadros de verificación, botóns de rádio, menus, etc.) e etiquetas deses contróis. Os usuários normalmente "completan" un formulário modificando os seus contróis (introducindo texto, seleccionando elementos dos menus, etc.) antes de enviar-lle o formulário a un axente para que este o procese (p.ex.: a un servidor web, a un servidor de correo, etc.).

Velaqui un formulário simples que inclui etiquetas, botóns de rádio e botóns (limpar o formulário ou enviá-lo):

 <FORM action="http://unsitio.com/prog/adicionarusuario" method="post">
<P>
<LABEL for="nome">Nome: </LABEL>
<INPUT type="text" id="nome"><BR>
<LABEL for="apelidos">Apelidos: </LABEL>
<INPUT type="text" id="apelidos"><BR>
<LABEL for="email">email: </LABEL>
<INPUT type="text" id="email"><BR>
<INPUT type="radio" name="sexo" value="Home"> Home<BR>
<INPUT type="radio" name="sexo" value="Muller"> Muller<BR>
<INPUT type="submit" value="Enviar"> <INPUT type="reset">
</P>
</FORM>

Nota. Esta especificación inclui información máis detallada sobre os formulários nas subseccións sobre cuestións sobre a apresentación de formulários .

17.2 Contróis

Os usuários interaccionan cos formulários através de contróis con nome.

O "nome de control" dun control vai definido polo seu atributo name . O rango dun atributo name para un control que estexa dentro dun elemento FORM é o elemento FORM .

Cada control ten un valor inicial e un valor actual, e ambos os dous son cadeas de caracteres. Consulte a definición de cada control se precisar de información sobre os valores iniciais e posíbeis restricións sobre os valores que o control poida impor. En xeral, o "valor inicial" dun control pode-se especificar co atributo value do elemento control. Porén, o valor inicial dun elemento TEXTAREA ven determinado polo seu conteúdo e o valor inicial dun elemento OBJECT nun formulário ven determinado pola implementación do obxecto (ou sexa, fica fóra do ámbito desta especificación).

O "valor actual" dun control asigna-se primeiro ao valor inicial. A partir de entón, o valor actual do control pode ser modificado através da interacción co usuário e con scripts.

O valor inicial dun control non varia. Asi, cando se limpa un formulário, o valor actual de cada control volve a ser o valor inicial. Se un control non ten un valor inicial, non se define o efecto dunha limpeza do formulário sobre ese control.

Cando se envia un formulário para ser procesado, alguns contróis os nomes dalguns contróis emparellan-se cos seus valores actuais e esas parellas son enviadas co formulário. Eses contróis cuxos parellas de nome/valor se envian chaman-se contróis exitosos .

17.2.1 Tipos de contróis

A HTML define os seguintes tipos de contróis:

botóns
Os autores poden crear tres tipos de botóns:

Os autores crean botóns co elemento BUTTON ou o elemento INPUT . Consulte as definicións destes elementos para detalles sobre como especificar os distintos tipos de botóns.

Nota. Os autores deberian saber que o elemento BUTTON oferece unhas capacidades de apresentación máis ricas que as do elemento INPUT .

recadros de verificación
Os recadros de verificación (e os botóns de rádio) son interruptores on/off que o usuário pode activar. Un interruptor está "seleccionado" ("on") cando se selecciona o atributo checked do elemento control. Cando se envia un formulário, só poden resultar exitosos os recadros de verificación "seleccionados" ("on").

Nun formulário, vários recadros de verificación poden compartillar o mesmo nome de control. Asi, por exemplo, un recadro de control permite que os usuários seleccionen vários valores da mesma propriedade. Para crear un control de recadro de verificación usa-se o elemento INPUT .

botóns de rádio
Os botóns de rádio son como recadros de verificación, exceito que cando vários deles compartillan o mesmo nome de control , son mutuamente exclusivos: cando un está "seleccionado" ("on"), todos os demáis que teñan o mesmo nome "deseleccionan-se" ("off"). Para crear un control de botón de rádio usa-se o elemento INPUT .
Se nengun botón de rádio dun conxunto que compartille o mesmo nome de control está seleccionado inicialmente, non se define o comportamento do axente de usuário para escoller que control está inicialmente seleccionado. Nota. Dado que as implementacións existentes tratan este caso de maneira diferente, a especificación actual difire de RFC 1866 ( [RFC1866] sección 8.1.2.4), que afirma:
En todos os casos, exactamente un dos botóns de rádio dun grupo está seleccionao. Se nengun dos elementos <INPUT> dun grupo de botóns de rádio especifica `CHECKED' ("seleccionado"), entón o axente de usuário debe seleccionar inicialmente o primeiro botón de rádio do grupo.

Dado que o comportamento dos axentes de usuário difire, os autores deberian-se asegurar de que en cada grupo de botóns de rádio se selecciona un deles inicialmente.

menus
Os menus oferecen-lles aos usuários opcións de entre as cais poden escoller. O elemento SELECT crea un menu, en combinación cos elementos OPTGROUP e OPTION .
entrada de texto
Os autores poden crear dous tipos de contróis que permiten que os usuários introduzan texto. O elemento INPUT crea un control de entrada de unha só liña e o elemento TEXTAREA crea un control de entrada de várias liñas. En ambos os dous casos, o texto introducido converte-se no valor actual do control.
seleccion de ficheiros
Este tipo de control permite que o usuário seleccione ficheiros para que os seus conteúdos se poidan enviar cun formulário. Para crear un control de selección de ficheiros usa-se o elemento INPUT .
contróis ocultos
Os autores poden crear contróis que non se mostran mais cuxos valores son enviados cun formulário. Os autores normalmente usan este tipo de control para armacenar información entre intercámbios cliente/servidor que se non se perderian debido à natureza (ver [RFC2616] ). Para crear un control oculto usa-se o elemento INPUT .
contróis de obxecto
Os autores poden inserir obxectos xenéricos nos formulários de tal maneira que os seus valores asociados se envian xunto cos demáis contróis. Para crear contróis de obxectos os autores poden usar o elemento OBJECT .

Os elementos usados para crear contróis normalmente aparecen dentro dun elemento FORM , mais tamén poden aparecer fora dunha declaración de elemento FORM cando se usan para construir interfaces de usuário. Isto trata-se na sección sobre acontecimentos intrínsecos. Observe-se que os contróis que aparecen fora dun formulário non poden ser contróis exitosos .

17.3 O elemento FORM

<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- formulário interactivo -->
<!ATTLIST FORM
%attrs; -- %coreattrs, %i18n, %events --
action %URI; #REQUIRED -- procesador de formulários do lado do servidor --
method (GET|POST) GET -- método HTTP utilizado para enviar o formulário--
enctype %ContentType; "application/x-www-form-urlencoded"
accept %ContentTypes; #IMPLIED -- lista de tipos MIME para o envio de ficheiros --
name CDATA #IMPLIED -- nome do formulário para os scripts --
onsubmit %Script; #IMPLIED -- enviou-se o formulário --
onreset %Script; #IMPLIED -- limpou-se o formulário --
accept-charset %Charsets; #IMPLIED -- lista de conxuntos de caracteres aceitados --
>

Etiqueta inicial: requerida , Etiqueta final: requerida

Definicións dos atributos

action = uri [CT]
Este atributo especifica o axente de procesamento dun formulário. Non se define o comportamento dos axentes de usuário para valores distintos dun URI de HTTP.
method = get|post [CI]
Este atributo especifica que método HTTP se utilizará para enviar o conxunto de dados do formulário . Valores posíbeis (insensíbeis a maiúsculas e minúsculas) son "get" (por omisión) e "post". Vexa-se a sección sobre envio de formulários para información sobre o seu uso.
enctype = content-type [CI]
Este atributo especifica o tipo de conteúdo utilizado para enviar o formulário ao servidor (cando o valor de method é "post"). O valor por omisión deste atributo é "application/x-www-form-urlencoded" . O valor "multipart/form-data" deberia ser usado en combinación co elemento INPUT , type="file".
accept-charset = charset list [CI]
Este atributo especifica a lista de codificacións de caracteres para dados introducidos que aceita o servidor que procesa este formulário. Este valor é unha lista de valores charset separados por espazos e/ou vírgulas. O cliente debe interpretar esta lista como exclusiva, isto é, o servidor é capaz de aceitar calquer codifiación de caractereres individual por entidade recebida.

O valor por omisión deste atributo é a cadea reservada "UNKNOWN" ("descoñecido"). Os axentes de usuário poden interpretar este valor como a codificación de caracteres que se usou para transmitir o documento que contiña este elemento FORM .

accept = content-type-list [CI]
Este atributo especifica unha lista separada por vírgulas dos tipos de conteúdos que tratará correctamente o servidor que procese este formulário. Os axentes de usuário poden usar esta información para filtrar ficheiros non conformes cando lle pidan ao usuário que seleccione ficheiros para enviar ao servidor (cf. o elemento INPUT cando type ="file").
name = cdata [CI]
Este atributo dá-lle un nome ao elemento para que sexa posíbel referir-se a este desde follas de estilo ou scripts. Nota. Este atributo inclue-se por compatibilidade para trás. As aplicacións deberian usar o atributo id para identificar elementos.

Atributos que se definen noutro sítio

O elemento FORM actua como contentor de contróis . Especifica:

Un formulário pode conter texto e código (parágrafos, listas, etc.) ademáis dos contróis de formulário.

O exemplo que segue mostra un formulário que será procesado polo programa "adicionarusuario" cando se envie. Enviará-se-lle o formulário ao programa usando o método de HTTP "post".

 <FORM action="http://unsitio.com/prog/adicionarusuario" method="post">
...conteúdo do formulário... </FORM>

Consulte a sección sobre envio de formulários para información sobre como os axentes de usuários deben preparar os dados dos formulários para os servidores e como os axentes de usuário deberian tratar as respostas esperadas.

Nota. Fica fora do ámbito desta especificación un tratamento máis completo sobre o comportamento dos servidores que receben dados de formulários.

17.4 O elemento INPUT

<!ENTITY % InputType
"(TEXT | PASSWORD | CHECKBOX |
RADIO | SUBMIT | RESET |
FILE | HIDDEN | IMAGE | BUTTON)"
>

<!-- require-se o atributo name para todos exceito para os botons enviar e limpar -->
<!ELEMENT INPUT - O EMPTY -- control de formulário -->
<!ATTLIST INPUT
%attrs; -- %coreattrs, %i18n, %events --
type %InputType; TEXT -- que tipo de control se necesita --
name CDATA #IMPLIED -- enviar como parte do formulário --
value CDATA #IMPLIED -- especificar para botóns de rádio e recadros de verificación --
checked (checked) #IMPLIED -- para botóns de rádio e recadros de verificación --
disabled (disabled) #IMPLIED -- non disponíbel neste contexto --
readonly (readonly) #IMPLIED -- para texto e contrasinais --
size CDATA #IMPLIED -- especificar para cada tipo de campo --
maxlength NUMBER #IMPLIED -- número máximo de caracteres para os campos de texto --
src %URI; #IMPLIED -- para campos con imaxes --
alt CDATA #IMPLIED -- descrición corta --
usemap %URI; #IMPLIED -- usar mapa de imaxes do lado do cliente --
ismap (ismap) #IMPLIED -- usar mapa de imaxes do lado do servidor --
tabindex NUMBER #IMPLIED -- posición na orde de tabulación --
accesskey %Character; #IMPLIED -- carácter da tecla de acesibilidade --
onfocus %Script; #IMPLIED -- o elemento recebeu o foco --
onblur %Script; #IMPLIED -- o elemento perdeu o foco --
onselect %Script; #IMPLIED -- seleccionou-se texto --
onchange %Script; #IMPLIED -- o valor do elemento mudou --
accept %ContentTypes; #IMPLIED -- lista de tipos MIME para o envio de ficheiros --
>

Etiqueta inicial: requerida, Etiqueta final: proibida

Definicións de atributos

type = text|password|checkbox|radio|submit|reset|file|hidden|image|button [CI]
Este atributo especifica do tipo de control que se creará. O valor por omisión deste atributo é "text" ("texto").
name = cdata [CI]
Este atributo asigna o nome do control .
value = cdata [CA]
Este atributo especifica o valor inicial do control. É opcional, exceito cando o atributo type ten o valor "radio" (botón de rádio) ou "checkbox" (recadro de verificación).
size = cdata [CN]
Este atributo di-lle ao axente de usuário o ancho inicial do control. Este ancho dá-se en pontos , exceito cando o atributo type ten o valor de "text" ou "password" (contrasinal). Neste caso, o seu valor refere-se a un número (un inteiro) de caracteres.
maxlength = number [CN]
Cando o atributo type ten o valor de "text" ou "password", este atributo especifica o número máximo de caracteres que pode introducir o usuário. Este número pode especificar o tamaño ( size indicado, en cuxo caso o axente de usuário deberia ofertar un mecanismo de desprazamento. O valor por omisión deste atributo é un número ilimitado.
checked [CI]
Cando o atributo type ten o valor de "radio" ou"checkbox", este atributo booleano especifica o botón que está seleccionado ("on"). Os axentes de usuário deben ignorar este atributo para outros tipos de control.
src = uri [CT]
Cando o atributo type ten o valor de "image" (imaxe), este atributo especifica a localización da imaxe que se usará para decorar o botón gráfico de envio.

Atributos que se definen noutro sítio

17.4.1 Tipos de control creados con INPUT

O tipo de control definido polo elemento INPUT depende do valor do atributo type :

text
Crea un control entrada de texto de unha só liña.
password
Como "text", mais o texto de entrada mostra-se de xeito que se escondan os caracteres (p.ex., unha série de asteriscos). Este tipo de control usa-se con frecuéncia para entradas sensíbeis, tais como contrasinais. Observe-se que o valor actual é o texto introducido polo usuário, non o texto mostrado polo axente de usuário.

Nota. Os deseñadores de aplicacións deberian fixar-se en que este mecanismo proporciona só unha seguranza reducida. Ainda que o contrasinal vai mascarado para observadores casuais polo axente de usuário, transmite-se ao servidor en texto simples e pode ser lido por calquer con aceso à rede de baixo nível.

checkbox
Crea un recadro de verificación.
radio
Crea un botón de rádio.
submit
Crea un botón de enviar.
image
Crea un botón de enviar gráfico. O valor do atributo src especifica o URI da imaxe que decorará o botón. Por razóns de acesibilidade, os autores deberian fornecer un texto alternativo para a imaxe através do atributo alt .

Cando se usa un dispositivo de ponteiro para facer clic na imaxe, envia-se o formulário e as coordenadas do clic pasan-se ao servidor. O valor x mide-se en pontos desde a esquerda da imaxe e o valor y en pontos desde a parte superior da imaxe. Os dados enviados incluen nome .x=valor-x e nome.y=valor-y, onde "nome" é o valor do atributo name e valor-x e valor-y son os valores das coordenadas x e y, respectivamente.

Se o servidor realiza accións diferentes dependendo do sítio no que se fixo clic, os usuários de navegadores non visuais estarán en desvantaxe. Por esta razón, os autores deberian considerar focaxes alternativas:

reset
Crea un botón de limpeza.
button
Crea un botón. Os axentes de usuário deberian usar o valor do atributo value como etiqueta do botón.
hidden
Crea un control oculto.
file
Crea un control de selección de ficheiro . Os axentes de usuário poden usar o valor do atributo value como nome inicial do ficheiro.

17.4.2 Exemplos de contróis que conteñen elementos INPUT

O seguinte fragmento de HTML de exemplo define un formulário simple que permite que o usuário introduza o seu nome, apelidos, enderezo de correo electrónico e sexo. Cando se activa o botón de enviar, o formulário envia-se ao programa indicado no atributo action .

 <FORM action="http://unsitio.com/prog/adicionarusuario" method="post">
<P>
Nome: <INPUT type="text" name="nome"><BR>
Apelidos: <INPUT type="text" name="apelidos"><BR>
email: <INPUT type="text" name="email"><BR>
<INPUT type="radio" name="sexo" value="Home"> Home<BR>
<INPUT type="radio" name="sexo" value="Muller"> Muller<BR>
<INPUT type="submit" value="Enviar"> <INPUT type="reset" value="Limpar">
</P>
</FORM>

Poderia-se mostrar este formulário como segue:

An example form rendering.

Na sección sobre o elemento LABEL trata-se a codificación de etiquetas tais como "Apelidos".

No seguinte exemplo, o nome de función JavaScritp verify dispara-se cando acontece o evento "onclick":

<HEAD>
<META http-equiv="Content-Script-Type" content="text/javascript">
</HEAD>
<BODY>
<FORM action="..." method="post">
<P>
<INPUT type="button" value="Fai clic aqui" onclick="verify()">
</FORM>
</BODY>

Consulte a sección sobre acontecimentos intrínsecos para máis información sobre scripts e eventos.

O exemplo que segue mostra como se poden enviar os conteúdos dun ficheiro especificado polo usuário xunto cun formulário. Pide-se-lle ao usuário o seu nome e unha lista de nomes de ficheiros que deberian ser enviados co formulário. Ao especificar o valor enctype de "multipart/form-data", os conteúdos de cada ficheiro serán empacotados para o seu envio nunha sección separada dun documento con várias partes.

<FORM action="http://servidor.dom/cgi/tratar"
enctype="multipart/form-data"
method="post">
<P>
Cal é o seu nome? <INPUT type="text" name="nome_de_quen_envia">
Que ficheiros vai enviar? <INPUT type="file" name="nome_dos_ficheiros">
</P>
</FORM>

17.5 O elemento BUTTON

<!ELEMENT BUTTON - -
(%flow;)* -(A|%formctrl;|FORM|FIELDSET)
-- botón -->
<!ATTLIST BUTTON
%attrs; -- %coreattrs, %i18n, %events --
name CDATA #IMPLIED
value CDATA #IMPLIED -- remetido ao servidor ao enviar --
type (button|submit|reset) submit -- para usar como botón de formulário --
disabled (desactivado) #IMPLIED -- non disponíbel neste contexto --
tabindex NUMBER #IMPLIED -- posición na orde de tabulación --
accesskey %Character; #IMPLIED -- carácter da tecla de acesibilidade --
onfocus %Script; #IMPLIED -- o elemento recebeu o foco --
onblur %Script; #IMPLIED -- o elemento perdeu o foco --
>

Etiqueta inicial: requerida, Etiqueta final: requerida

Definicións de atributos

name = cdata [CI]
Este atributo asigna o nome do control.
value = cdata [CS]
Este atributo asigna o valor inicial do botón.
type = submit|button|reset [CI]
Este atributo declara o tipo de botón. Valores posíbeis:
Atributos que se definen noutro sítio:

Os botóns creados co elemento BUTTON funcionan exactamente igual que os botóns creados co elemento INPUT , mais oferecen posibilidades de apresentación máis ricas: o elemento BUTTON pode ter conteúdo. Por exemplo, un elemento BUTTON que conteña unha imaxe funciona como e pode parecer-se a un elemento INPUT cuxo type sexa "image", mais o tipo de elemento BUTTON permite conteúdo.

Os axentes de usuário visuais poden mostrar botóns BUTTON con relevo e movimento para riba e abaixo cando se fai clic neles encanto os botóns INPUT se mostran como imaxes "planas".

O exemplo seguinte amplia un exemplo anterior, mais crea botóns submit e reset con BUTTON en vez de INPUT . Os botóns conteñen imaxes por meio do elemento IMG .

 <FORM action="http://unsitio.com/prog/adicionarusuario" method="post">
<P>
Nome: <INPUT type="text" name="nome"><BR>
Apelidos: <INPUT type="text" name="apelidos"><BR>
email: <INPUT type="text" name="email"><BR>
<INPUT type="radio" name="sexo" value="Home"> Home<BR>
<INPUT type="radio" name="sexo" value="Muller"> Muller<BR>
<BUTTON name="enviar" value="enviar" type="submit">
Send<IMG src="/icons/tremendo.gif" alt="tremendo"></BUTTON>
<BUTTON name="limpar" type="reset">
Limpar<IMG src="/icons/vaia-vaia.gif" alt="vaia-vaia"></BUTTON>
</P>
</FORM>

Lembre que os autores deben fornecer un texto alternativo para un elemento IMG .

É ilegar asociar un mapa de imaxes cun IMG que aparece como o conteúdo dun elemento BUTTON .

EXEMPLO ILEGAL:
O que segue non é HTML legal.

<BUTTON>
<IMG src="oquesexa.gif" usemap="...">
</BUTTON>

17.6 Os elementos SELECT , OPTGROUP , e OPTION

<!ELEMENT SELECT - - (OPTGROUP|OPTION)+ -- selector de opcións -->
<!ATTLIST SELECT
%attrs; -- %coreattrs, %i18n, %events --
name CDATA #IMPLIED -- nome do campo --
size NUMBER #IMPLIED -- filas visíbeis --
multiple (múltiple) #IMPLIED -- por omisión é selección simples --
disabled (desactivado) #IMPLIED -- non disponíbel neste contexto --
tabindex NUMBER #IMPLIED -- posición na orde de tabulación --
onfocus %Script; #IMPLIED -- o elemento recebeu o foco --
onblur %Script; #IMPLIED -- o elemento perdeu o foco --
onchange %Script; #IMPLIED -- mudou o valor do elemento --
>

Etiqueta inicial: requerida, Etiqueta final: requerida

Definicións de atributo SELECT

name = cdata [CI]
Este atributo asigna o nome do control.
size = number [CN]
Se se apresenta un elemento SELECT como un recadro de lista desprazábel, este atributo especifica o número de filas da lista que deberian poder ser vistas a un tempo. Non se require que os axentes de usuário visuais apresenten un elemento SELECT como un recadro de lista; poden usar outro mecanismo, tal como un menu despregábel.
multiple [CI]
Se se activa, este atributo booleano permite seleccións múltiplas. Se non se activa, o elemento SELECT só permite seleccións únicas.

Atributos que se definen noutro sítio