Estoy generando una imagen en el lado del cliente y lo muestro con HTML como este: Quiero ofrecer la posibilidad de descargar la imagen generada. ¿Cómo puedo darme cuenta de que el navegador está abriendo un diálogo de guardar archivo (o simplemente descargar la imagen como cromo o firefox a la carpeta de descarga) que permite al usuario guardar la imagen sin hacer clic derecho y guardar como en la imagen que yo Prefieren una solución sin interacción con el servidor. Por lo tanto, soy consciente de que sería posible si primero cargue la Imagen y luego inicie la descarga.17.1 Introducción a los formularios Un formulario HTML es una sección de un documento que contiene contenido normal, marcado, elementos especiales denominados controles (casillas de verificación, Menús, etc.), y etiquetas en esos controles. Los usuarios normalmente completan un formulario modificando sus controles (ingresando texto, seleccionando elementos de menú, etc.), antes de enviar el formulario a un agente para su procesamiento (por ejemplo, a un servidor Web, a un servidor de correo, etc.). Incluye etiquetas, botones de radio y botones (restablecer el formulario o enviarlo): Nota. Esta especificación incluye información más detallada sobre los formularios en las subsecciones en los problemas de presentación de formularios. Un nombre de control de controles está dado por su atributo de nombre. El ámbito del atributo name para un control dentro de un elemento FORM es el elemento FORM. Cada control tiene un valor inicial y un valor actual, ambos son cadenas de caracteres. Consulte la definición de cada control para obtener información sobre los valores iniciales y las posibles restricciones sobre los valores impuestos por el control. En general, se puede especificar un valor inicial de los controles con el atributo de valor de los elementos de control. Sin embargo, el valor inicial de un elemento TEXTAREA está dado por su contenido y el valor inicial de un elemento OBJECT en un formulario es determinado por la implementación del objeto (es decir, está fuera del alcance de esta especificación). El valor actual de los controles se ajusta primero en el valor inicial. Posteriormente, el valor actual de los controles se puede modificar mediante la interacción del usuario y los scripts. El valor inicial de los controles no cambia. Por lo tanto, cuando se restablece un formulario, cada valor actual de control se restablece a su valor inicial. Si un control no tiene un valor inicial, el efecto de un restablecimiento de forma en ese control no está definido. Cuando se envía un formulario para su procesamiento, algunos controles tienen su nombre emparejado con su valor actual y estos pares se envían con el formulario. Los controles para los que se envían pares nombre / valor se denominan controles exitosos. HTML define los siguientes tipos de control: botones Los autores pueden crear tres tipos de botones: enviar botones. Cuando se activa, un botón de envío envía un formulario. Un formulario puede contener más de un botón de envío. Botones de reinicio. Cuando se activa, un botón de reinicio restablece todos los controles a sus valores iniciales. Apretar botones. Los botones no tienen comportamiento predeterminado. Cada botón puede tener secuencias de comandos del lado del cliente asociadas con los atributos de eventos de elementos. Cuando se produce un evento (por ejemplo, el usuario presiona el botón, lo libera, etc.), se activa el script asociado. Los autores deben especificar el lenguaje de secuencias de comandos de un script de pulsador mediante una declaración de script predeterminada (con el elemento META). Los autores crean botones con el elemento BOTÓN o el elemento INPUT. Consulte las definiciones de estos elementos para obtener detalles sobre cómo especificar diferentes tipos de botones. Nota. Los autores deben tener en cuenta que el elemento BUTTON ofrece capacidades de renderización más ricas que el elemento INPUT. Casillas de verificación Las casillas de verificación (y los botones de opción) son interruptores de encendido / apagado que pueden ser conmutados por el usuario. Un interruptor está encendido cuando se ha establecido el atributo de control de elementos seleccionados. Cuando se envía un formulario, sólo los controles de casilla de verificación pueden tener éxito. Varias casillas de verificación en un formulario pueden compartir el mismo nombre de control. Así, por ejemplo, las casillas de verificación permiten a los usuarios seleccionar varios valores para la misma propiedad. El elemento INPUT se utiliza para crear un control de casilla de verificación. Los botones de radio Los botones de radio son como las casillas de verificación excepto que cuando varios comparten el mismo nombre de control. Son mutuamente excluyentes: cuando uno está encendido, todos los demás con el mismo nombre están apagados. El elemento INPUT se utiliza para crear un control de botón de radio. Si no hay ningún botón de radio en un conjunto compartiendo el mismo nombre de control está inicialmente activado, el comportamiento del agente de usuario para elegir qué control está inicialmente activado no está definido. Nota. Dado que las implementaciones existentes manejan este caso de manera diferente, la especificación actual difiere del RFC 1866 (RFC1866 sección 8.1.2.4), que establece: En todo momento, se comprueba exactamente uno de los botones de radio en un conjunto. Si ninguno de los elementos ltINPUTgt de un conjunto de botones de radio especifica CHECKED, el agente de usuario debe comprobar inicialmente el primer botón de opción del conjunto. Dado que el comportamiento del agente de usuario difiere, los autores deben asegurarse de que en cada conjunto de botones de radio que uno está inicialmente en. Menús Los menús ofrecen a los usuarios opciones para elegir. El elemento SELECT crea un menú, en combinación con los elementos OPTGROUP y OPTION. Entrada de texto Los autores pueden crear dos tipos de controles que permiten a los usuarios introducir texto. El elemento INPUT crea un control de entrada de una sola línea y el elemento TEXTAREA crea un control de entrada de varias líneas. En ambos casos, el texto de entrada se convierte en el valor actual de los controles. File select Este tipo de control permite al usuario seleccionar archivos para que su contenido pueda ser enviado con un formulario. El elemento INPUT se utiliza para crear un control de selección de archivos. Controles ocultos Los autores pueden crear controles que no se procesan pero cuyos valores se envían con un formulario. Los autores generalmente utilizan este tipo de control para almacenar información entre intercambios cliente / servidor que de otro modo se perderían debido a la naturaleza sin estado de HTTP (ver RFC2616). El elemento INPUT se utiliza para crear un control oculto. Controles de objetos Los autores pueden insertar objetos genéricos en formularios de forma que los valores asociados se envíen junto con otros controles. Los autores crean controles de objeto con el elemento OBJECT. Los elementos utilizados para crear controles generalmente aparecen dentro de un elemento FORM, pero también pueden aparecer fuera de una declaración de elemento FORM cuando se utilizan para crear interfaces de usuario. Esto se discute en la sección sobre los eventos intrínsecos. Tenga en cuenta que los controles fuera de un formulario no pueden ser controles exitosos. 17.3 La acción del elemento FORM uri CT Este atributo especifica un agente de procesamiento de formularios. El comportamiento del agente de usuario para un valor distinto de un URI HTTP no está definido. Method getpost CI Este atributo especifica qué método HTTP se utilizará para enviar el conjunto de datos del formulario. Los valores posibles (sin distinción entre mayúsculas y minúsculas) son get (el valor predeterminado) y post. Consulte la sección sobre la presentación de formularios para obtener información sobre el uso. Enctype content-type CI Este atributo especifica el tipo de contenido utilizado para enviar el formulario al servidor (cuando el valor del método es post). El valor predeterminado para este atributo es application / x-www-form-urlencoded. El valor multipart / form-data debe utilizarse en combinación con el elemento INPUT, tipo file. Accept-charset charset list CI Este atributo especifica la lista de codificaciones de caracteres para los datos de entrada aceptados por el servidor que procesa este formulario. El valor es una lista delimitada por espacios y / o comas de los valores del conjunto de caracteres. El cliente debe interpretar esta lista como una lista exclusiva o, es decir, el servidor es capaz de aceptar cualquier codificación de caracteres individuales por entidad recibida. El valor predeterminado para este atributo es la cadena reservada UNKNOWN. Los agentes de usuario pueden interpretar este valor como la codificación de caracteres que se utilizó para transmitir el documento que contiene este elemento FORM. Accept content-type-list CI Este atributo especifica una lista separada por comas de tipos de contenido que un servidor que procesa este formulario manejará correctamente. Los agentes de usuario pueden usar esta información para filtrar archivos no conformes cuando solicitan a un usuario que seleccione los archivos que se enviarán al servidor (consulte el elemento INPUT cuando escriba archivo). Nombre cdata CI Este atributo nombra el elemento de forma que pueda referirse a él desde hojas de estilo o guiones. Nota. Este atributo se ha incluido para compatibilidad con versiones anteriores. Las aplicaciones deben utilizar el atributo id para identificar elementos. Atributos definidos en otra parte El elemento FORM actúa como un contenedor para controles. Especifica: El diseño del formulario (dado por el contenido del elemento). El programa que manejará el formulario completado y enviado (el atributo de acción). El programa de recepción debe ser capaz de analizar pares nombre / valor con el fin de hacer uso de ellos. Método por el cual se enviarán los datos de usuario al servidor (el atributo del método). Una codificación de caracteres que debe ser aceptada por el servidor para poder manejar este formulario (el atributo accept-charset). Los agentes de usuario pueden informar al usuario del valor del atributo accept-charset y / o restringir la capacidad de los usuarios para introducir caracteres no reconocidos. Un formulario puede contener texto y marcado (párrafos, listas, etc.) además de controles de formulario. El ejemplo siguiente muestra un formulario que debe ser procesado por el programa adduser cuando se envía. El formulario se enviará al programa mediante el método de publicación HTTP. Consulte la sección sobre la presentación de formularios para obtener información sobre cómo los agentes de usuario deben preparar los datos de formulario para los servidores y cómo los agentes de usuario deben manejar las respuestas esperadas. Nota. Más discusión sobre el comportamiento de los servidores que reciben datos de forma está más allá del alcance de esta especificación. 17.4 El tipo de elemento INPUT textpasswordcheckboxradiosubmitresetfilehiddenimagebutton CI Este atributo especifica el tipo de control a crear. El valor predeterminado para este atributo es texto. Nombre cdata CI Este atributo asigna el nombre del control. Value cdata CA Este atributo especifica el valor inicial del control. Es opcional, excepto cuando el atributo type tiene el valor radio o checkbox. Size cdata CN Este atributo le dice al agente de usuario el ancho inicial del control. El ancho se indica en píxeles, excepto cuando el atributo type tiene el valor text o password. En ese caso, su valor se refiere al número (entero) de caracteres. Maxlength number CN Cuando el atributo type tiene el valor text o password, este atributo especifica el número máximo de caracteres que el usuario puede ingresar. Este número puede exceder el tamaño especificado. En cuyo caso el agente de usuario debería ofrecer un mecanismo de desplazamiento. El valor predeterminado para este atributo es un número ilimitado. Checked CI Cuando el atributo type tiene el valor radio o checkbox, este atributo booleano especifica que el botón está activado. Los agentes de usuario deben ignorar este atributo para otros tipos de control. Src uri CT Cuando el atributo type tiene la imagen de valor, este atributo especifica la ubicación de la imagen que se usará para decorar el botón de presentación gráfica. Atributos definidos en otra parte El tipo de control definido por el elemento INPUT depende del valor del atributo type: text Crea un control de entrada de texto de una sola línea. Contraseña Al igual que el texto, pero el texto de entrada se representa de tal manera que ocultar los caracteres (por ejemplo, una serie de asteriscos). Este tipo de control se utiliza a menudo para entradas sensibles, como contraseñas. Tenga en cuenta que el valor actual es el texto introducido por el usuario, no el texto procesado por el agente de usuario. Nota. Los diseñadores de aplicaciones deben tener en cuenta que este mecanismo ofrece sólo protección de seguridad ligera. Aunque la contraseña está enmascarada por agentes de usuario de observadores ocasionales, se transmite al servidor en texto claro y puede ser leído por cualquier persona con acceso de bajo nivel a la red. Checkbox Crea una casilla de verificación. Radio Crea un botón de radio. Submit Crea un botón de envío. Image Crea un botón de presentación gráfica. El valor del atributo src especifica el URI de la imagen que decorará el botón. Por razones de accesibilidad, los autores deben proporcionar texto alternativo para la imagen a través del atributo alt. Cuando se utiliza un dispositivo señalador para hacer clic en la imagen, se envía el formulario y se pasan las coordenadas de clic al servidor. El valor x se mide en píxeles desde la izquierda de la imagen y el valor y en píxeles desde la parte superior de la imagen. Los datos enviados incluyen el nombre. x valor x y nombre. y valor y donde nombre es el valor del atributo name, y valor x y valor y son los valores de coordenadas xey, respectivamente. Si el servidor toma diferentes acciones dependiendo de la ubicación en la que se haya hecho clic, los usuarios de navegadores no gráficos se verán en desventaja. Por esta razón, los autores deben considerar enfoques alternativos: Utilice varios botones de envío (cada uno con su propia imagen) en lugar de un solo botón de presentación gráfica. Los autores pueden usar hojas de estilo para controlar el posicionamiento de estos botones. Utilice un mapa de imagen del lado del cliente junto con secuencias de comandos. Reset Crea un botón de reinicio. Button Crea un pulsador. Los agentes de usuario deben utilizar el valor del atributo value como etiqueta de los botones. Hidden Crea un control oculto. File Crea un control de selección de archivos. Los agentes de usuario pueden utilizar el valor del atributo value como nombre de archivo inicial.17.4.2 Ejemplos de formularios que contienen controles INPUT El fragmento HTML de ejemplo siguiente define un formulario simple que permite al usuario introducir un nombre, apellido, dirección de correo electrónico, Y género. Cuando se activa el botón de envío, el formulario se enviará al programa especificado por el atributo action. Este formulario se puede representar de la siguiente manera: En la sección sobre el elemento LABEL, discutimos la marcación de etiquetas como nombre. En este ejemplo siguiente, la verificación de nombre de función JavaScript se activa cuando se produce el evento onclick: Consulte la sección sobre eventos intrínsecos para obtener más información sobre secuencias de comandos y eventos. El siguiente ejemplo muestra cómo se puede enviar el contenido de un archivo especificado por el usuario con un formulario. Se le pide al usuario su nombre y una lista de nombres de archivo cuyo contenido debe enviarse con el formulario. Al especificar el valor enctype de multipart / form-data, cada contenido de los archivos se empaquetará para su presentación en una sección separada de un documento de varias partes. 17.5 El elemento BUTTON Atributos definidos en otro lugar Los botones creados con la función BUTTON funcionan igual que los botones creados con el elemento INPUT, pero ofrecen posibilidades de renderización más ricas: el elemento BUTTON puede tener contenido. Por ejemplo, un elemento BUTTON que contiene una imagen funciona como y puede parecerse a un elemento INPUT cuyo tipo está definido como imagen, pero el tipo de elemento BUTTON permite contenido. Los agentes visuales del usuario pueden presionar los botones BUTTON con relieve y un movimiento hacia arriba / hacia abajo cuando se hace clic, mientras que pueden convertir los botones INPUT en imágenes planas. El siguiente ejemplo expande un ejemplo anterior, pero crea botones de envío y restablecimiento con BOTÓN en lugar de ENTRADA. Los botones contienen imágenes por medio del elemento IMG. Recuerde que los autores deben proporcionar texto alternativo para un elemento IMG. Es ilegal asociar un mapa de imagen con un IMG que aparece como el contenido de un elemento BUTTON. EJEMPLO ILEGAL: Lo siguiente no es HTML legal. 17.6 El botón SELECT. OPTGROUP. Y OPTION SELECT Definiciones de atributo nombre cdata CI Este atributo asigna el nombre del control. Número de tamaño CN Si un elemento SELECT se presenta como un cuadro de lista desplazado, este atributo especifica el número de filas de la lista que deben estar visibles al mismo tiempo. Los agentes de usuario visuales no están obligados a presentar un elemento SELECT como un cuadro de lista pueden utilizar cualquier otro mecanismo, como un menú desplegable. Multiple CI Si se establece, este atributo booleano permite múltiples selecciones. Si no se establece, el elemento SELECT solo permite selecciones individuales. Atributos definidos en otro lugar El elemento SELECT crea un menú. Cada opción ofrecida por el menú está representada por un elemento OPTION. Un elemento SELECT debe contener al menos un elemento OPTION. El elemento OPTGROUP permite a los autores agrupar las opciones lógicamente. Esto es particularmente útil cuando el usuario debe elegir entre una larga lista de opciones. Los grupos de opciones relacionadas son más fáciles de entender y recordar que una sola larga lista de opciones. En HTML 4, todos los elementos OPTGROUP deben especificarse directamente dentro de un elemento SELECT (es decir, los grupos no pueden estar anidados). Cero o más opciones pueden estar preseleccionadas para el usuario. Los agentes de usuario deben determinar qué opciones están preseleccionadas de la siguiente manera: Si ningún elemento OPTION tiene el conjunto de atributos seleccionado, el comportamiento del agente de usuario para elegir qué opción se selecciona inicialmente no está definido. Nota. Dado que las implementaciones existentes manejan este caso de forma diferente, la especificación actual difiere de RFC 1866 (RFC1866 sección 8.1.3), que establece: El estado inicial tiene la primera opción seleccionada, a menos que un atributo SELECTED está presente en cualquiera de los elementos ltOPTIONgt. Dado que el comportamiento del agente de usuario difiere, los autores deben asegurarse de que cada menú incluya una opción predeterminada predeterminada. Si un elemento OPTION tiene seleccionado el atributo seleccionado, debe estar preseleccionado. Si el elemento SELECT tiene el conjunto de atributos múltiples y más de un elemento OPTION tiene el conjunto de atributos seleccionado, todos deben estar preseleccionados. Se considera un error si más de un elemento OPTION tiene el conjunto de atributos seleccionado y el elemento SELECT no tiene el conjunto de atributos múltiples. Los agentes de usuario pueden variar en cómo manejan este error, pero no deben preseleccionar más de una opción. OPTGROUP Definiciones de atributo label text CS Este atributo especifica la etiqueta del grupo de opciones. Atributos definidos en otra parte Nota. Se aconseja a los implementadores que versiones futuras de HTML puedan extender el mecanismo de agrupación para permitir que los grupos anidados (es decir, los elementos OPTGROUP puedan anidar). Esto permitirá a los autores representar una jerarquía más rica de opciones. OPTION Definiciones de atributos seleccionadas CI Cuando se establece, este atributo booleano especifica que esta opción está preseleccionada. Value cdata CS Este atributo especifica el valor inicial del control. Si no se establece este atributo, el valor inicial se establece en el contenido del elemento OPTION. Label text CS Este atributo permite a los autores especificar una etiqueta más corta para una opción que el contenido del elemento OPTION. Cuando se especifica, los agentes de usuario deben utilizar el valor de este atributo en lugar del contenido del elemento OPTION como etiqueta de opción. Atributos definidos en otro lugar Al renderizar una opción de menú. Los agentes de usuario deben utilizar el valor del atributo label del elemento OPTION como opción. Si no se especifica este atributo, los agentes de usuario deben utilizar el contenido del elemento OPTION. El atributo label del elemento OPTGROUP especifica la etiqueta para un grupo de opciones. En este ejemplo, creamos un menú que permite al usuario seleccionar cuál de los siete componentes de software debe instalar. Los componentes primero y segundo están preseleccionados pero pueden ser deseleccionados por el usuario. Los componentes restantes no están preseleccionados. El atributo size indica que el menú sólo debe tener 4 filas aunque el usuario puede seleccionar entre 7 opciones. Las otras opciones deben estar disponibles a través de un mecanismo de desplazamiento. El botón SELECT es seguido por los botones de envío y restablecimiento. Sólo las opciones seleccionadas tendrán éxito (utilizando el nombre de control component-select). Cuando no se selecciona ninguna opción, el control no tiene éxito y ni el nombre ni los valores se envían al servidor cuando se envía el formulario. Tenga en cuenta que cuando se establece el atributo value, determina el valor inicial de los controles. De lo contrario es el contenido de los elementos. En este ejemplo usamos el elemento OPTGROUP para agrupar las opciones. El siguiente marcado: representa el siguiente agrupamiento: Los agentes de usuario visuales pueden permitir a los usuarios seleccionar de grupos de opciones a través de un menú jerárquico o algún otro mecanismo que refleje la estructura de las opciones. Un agente de usuario gráfico podría hacerlo así: Esta imagen muestra un elemento SELECT representado como menús en cascada. La etiqueta superior del menú muestra el valor actualmente seleccionado (PortMaster 3, 3.7.1). El usuario ha desplegado dos menús en cascada, pero aún no ha seleccionado el nuevo valor (PortMaster 2, 3.7). Tenga en cuenta que cada menú en cascada muestra la etiqueta de un elemento OPTGROUP u OPTION. 17.7 El nombre del elemento TEXTAREA cdata CI Este atributo asigna el nombre del control. Número de filas CN Este atributo especifica el número de líneas de texto visibles. Los usuarios deben ser capaces de introducir más líneas que esto, por lo que los agentes de usuario deben proporcionar algunos medios para desplazarse a través del contenido del control cuando el contenido se extienden más allá del área visible. Cols number CN Este atributo especifica el ancho visible en anchos de caracteres medios. Los usuarios deben ser capaces de introducir líneas más largas que esto, por lo que los agentes de usuario deben proporcionar algunos medios para desplazarse a través del contenido del control cuando el contenido se extiende más allá del área visible. Los agentes de usuario pueden ajustar líneas de texto visibles para mantener las líneas largas visibles sin necesidad de desplazarse. Atributos definidos en otro lugar El elemento TEXTAREA crea un control de entrada de texto de varias líneas. Los agentes de usuario deben usar el contenido de este elemento como el valor inicial del control y deben renderizar este texto inicialmente. Este ejemplo crea un control TEXTAREA que es 20 filas por 80 columnas y contiene dos líneas de texto inicialmente. TEXTAREA es seguido por los botones de envío y restablecimiento. Establecer el atributo readonly permite a los autores mostrar texto no modificable en un TEXTAREA. Esto difiere de usar texto marcado estándar en un documento porque el valor de TEXTAREA se envía con el formulario. 17.8 El elemento ISINDEX ISINDEX está obsoleto. Este elemento crea un control de entrada de texto de una sola línea. Los autores deben utilizar el elemento INPUT para crear controles de entrada de texto. Vea la DTD Transicional para la definición formal. Prompt text CS Deprecated. Este atributo especifica una cadena de petición para el campo de entrada. Atributos definidos en otra parte El elemento ISINDEX crea un control de entrada de texto de una sola línea que permite cualquier número de caracteres. Los agentes de usuario pueden utilizar el valor del atributo prompt como título para el indicador. EJEMPLO DEPRECATED: La siguiente declaración ISINDEX: podría ser reescrito con INPUT de la siguiente manera: Semántica de ISINDEX. Actualmente, la semántica para ISINDEX sólo está bien definida cuando el URI de base para el documento adjunto es un URI HTTP. En la práctica, la cadena de entrada está restringida a Latin-1 ya que no hay ningún mecanismo para que el URI especifique un conjunto de caracteres diferente. Algunos controles de formulario tienen automáticamente etiquetas asociadas (botones de prensa) mientras que la mayoría no lo hacen (campos de texto, casillas de verificación y botones de opción y menús). Para los controles que tienen etiquetas implícitas, los agentes de usuario deben utilizar el valor del atributo value como cadena de etiqueta. El elemento LABEL se utiliza para especificar etiquetas para controles que no tienen etiquetas implícitas, 17.9.1 El elemento LABEL para idref CS Este atributo asocia explícitamente la etiqueta que se está definiendo con otro control. Cuando está presente, el valor de este atributo debe ser el mismo que el valor del atributo id de algún otro control en el mismo documento. Cuando está ausente, la etiqueta que se define está asociada con el contenido de los elementos. Atributos definidos en otras partes El elemento LABEL puede utilizarse para adjuntar información a los controles. Cada elemento LABEL se asocia exactamente con un control de formulario. El atributo for asocia explícitamente una etiqueta con otro control: el valor del atributo for debe ser igual al valor del atributo id del elemento de control asociado. Más de un LABEL puede estar asociado con el mismo control creando múltiples referencias a través del atributo for. Este ejemplo crea una tabla que se utiliza para alinear dos controles de entrada de texto y sus etiquetas asociadas. Cada etiqueta se asocia explícitamente con una entrada de texto: Este ejemplo extiende un formulario de ejemplo anterior para incluir elementos LABEL. Para asociar una etiqueta con otro control implícitamente, el elemento de control debe estar dentro del contenido del elemento LABEL. En este caso, el LABEL sólo puede contener un elemento de control. La propia etiqueta puede colocarse antes o después del control asociado. En este ejemplo, asociamos implícitamente dos etiquetas con dos controles de entrada de texto: Tenga en cuenta que esta técnica no se puede utilizar cuando se utiliza una tabla para diseño, con la etiqueta en una celda y su control asociado en otra celda. Cuando un elemento LABEL recibe el foco. Pasa el foco a su control asociado. Consulte la sección siguiente en las teclas de acceso para ver ejemplos. Las etiquetas pueden ser representadas por agentes de usuario de varias maneras (por ejemplo visualmente, leídas por sintetizadores de voz, etc.) 17.10 Agregar estructura a formas: los elementos FIELDSET y LEGEND LEGEND Definiciones de atributo align topbottomleftright CI Deprecated. Este atributo especifica la posición de la leyenda con respecto al conjunto de campos. Valores posibles: arriba: La leyenda está en la parte superior del campo. Este es el valor predeterminado. Bottom: La leyenda está en la parte inferior del fieldset. Left: La leyenda está en el lado izquierdo del fieldset. Right: La leyenda está en el lado derecho del fieldset. Atributos definidos en otra parte El elemento FIELDSET permite a los autores agrupar controles y etiquetas relacionados con temas. Los controles de agrupación facilitan a los usuarios la comprensión de su propósito, al mismo tiempo que facilitan la navegación con pestañas para agentes de usuario visual y la navegación de voz para agentes de usuario orientados al habla. El uso adecuado de este elemento hace que los documentos sean más accesibles. El elemento LEGEND permite a los autores asignar un título a un FIELDSET. La leyenda mejora la accesibilidad cuando el FIELDSET se procesa de forma no visual. En este ejemplo, creamos un formulario que uno puede llenar en la oficina de los médicos. Se divide en tres secciones: información personal, historial médico y medicamentos actuales. Cada sección contiene controles para introducir la información apropiada. Tenga en cuenta que en este ejemplo, podemos mejorar la presentación visual del formulario alineando elementos dentro de cada FIELDSET (con hojas de estilo), añadiendo información de color y fuente (con hojas de estilo), añadiendo scripting (digamos, para abrir el texto de medicamento actual En el caso de que el usuario indique que está tomando medicamentos), etc. En un documento HTML, un elemento debe recibir el foco del usuario para activarse y realizar sus tareas. Por ejemplo, los usuarios deben activar un enlace especificado por el elemento A para seguir el enlace especificado. Del mismo modo, los usuarios deben dar un enfoque TEXTAREA para introducir texto en él. Hay varias maneras de dar enfoque a un elemento: Designe el elemento con un dispositivo señalador. Navegue de un elemento al siguiente con el teclado. El autor de documentos puede definir un orden de tabulación que especifique el orden en el que los elementos recibirán foco si el usuario navega el documento con el teclado (consulte la pestaña de navegación). Una vez seleccionado, un elemento puede ser activado por alguna otra secuencia de teclas. Seleccione un elemento a través de una tecla de acceso (a veces llamada atajo de teclado o acelerador de teclado). Tabindex number CN Este atributo especifica la posición del elemento actual en el orden de tabulación del documento actual. Este valor debe ser un número entre 0 y 32767. Los agentes de usuario deben ignorar los ceros a la izquierda. El orden de tabulación define el orden en que los elementos recibirán el foco cuando son navegados por el usuario a través del teclado. El orden de tabulación puede incluir elementos anidados dentro de otros elementos. Los elementos que pueden recibir el enfoque deben ser navegados por agentes de usuario de acuerdo con las siguientes reglas: Aquellos elementos que soportan el atributo tabindex y asignan un valor positivo a él se navegan primero. La navegación procede del elemento con el valor tabindex más bajo al elemento con el valor más alto. Los valores no necesitan ser secuenciales ni deben comenzar con un valor particular. Los elementos que tienen valores tabindex idénticos se deben navegar en el orden en que aparecen en el flujo de caracteres. Aquellos elementos que no admiten el atributo tabindex o lo admiten y asignan un valor de 0 se navegan a continuación. Estos elementos se navegan en el orden en que aparecen en el flujo de caracteres. Los elementos que están desactivados no participan en el orden de tabulación. En este ejemplo, el orden de tabulación será el BOTÓN. Los elementos INPUT en orden (observe que el campo 1 y el botón comparten el mismo tabindex, pero el campo 1 aparece más adelante en el flujo de caracteres) y finalmente el enlace creado por el elemento A. Teclas de tabulación. La secuencia de teclas real que provoca la navegación mediante pestañas o la activación de elementos depende de la configuración del agente de usuario (por ejemplo, la tecla de tabulación se utiliza para la navegación y la tecla de entrada se utiliza para activar un elemento seleccionado). Los agentes de usuario también pueden definir secuencias de teclas para navegar por el orden de tabulación en sentido inverso. Cuando se alcanza el final (o comienzo) del orden de tabulación, los agentes de usuario pueden volver al principio (o al final). Accesskey character CN Este atributo asigna una clave de acceso a un elemento. Una clave de acceso es un solo carácter del juego de caracteres del documento. Nota. Los autores deben considerar el método de entrada del lector esperado al especificar una clave de acceso. Al presionar una tecla de acceso asignada a un elemento se da el foco al elemento. La acción que ocurre cuando un elemento recibe el foco depende del elemento. Por ejemplo, cuando un usuario activa un enlace definido por el elemento A, el agente de usuario generalmente sigue el enlace. Cuando un usuario activa un botón de opción, el agente de usuario cambia el valor del botón de opción. Cuando el usuario activa un campo de texto, permite la entrada, etc. Este ejemplo asigna la clave de acceso U a una etiqueta asociada con un control INPUT. Al pulsar la tecla de acceso se da el foco a la etiqueta que a su vez le da al control asociado. El usuario puede introducir texto en el área INPUT. En este ejemplo, asignamos una clave de acceso a un enlace definido por el elemento A. Escribir esta clave de acceso lleva al usuario a otro documento, en este caso, una tabla de contenido. La invocación de las claves de acceso depende del sistema subyacente. Por ejemplo, en máquinas que ejecutan MS Windows, generalmente se tiene que presionar la tecla alt además de la tecla de acceso. En los sistemas de Apple, uno generalmente tiene que presionar la tecla cmd además de la clave de acceso. La representación de las claves de acceso depende del agente del usuario. Recomendamos que los autores incluyan la clave de acceso en el texto de la etiqueta o donde quiera que se aplique la clave de acceso. Los agentes de usuario deben representar el valor de una clave de acceso de tal manera que hagan hincapié en su función y la distinguen de otros caracteres (por ejemplo, subrayándola). En contextos en los que la entrada del usuario es indeseable o irrelevante, es importante poder desactivar un control o hacer que sea de sólo lectura. Por ejemplo, es posible que desee desactivar un botón de envío de formularios hasta que el usuario haya introducido algunos datos necesarios. Del mismo modo, un autor puede querer incluir una pieza de texto de sólo lectura que debe ser presentado como un valor junto con el formulario. En las secciones siguientes se describen los controles deshabilitados y de sólo lectura. IC deshabilitado Cuando se establece para un control de formulario, este atributo booleano deshabilita el control para la entrada del usuario. Cuando se establece, el atributo disabled tiene los siguientes efectos en un elemento: Este atributo se hereda pero las declaraciones locales anulan el valor heredado. La forma en que se renderizan los elementos deshabilitados depende del agente del usuario. Por ejemplo, algunos agentes de usuario borran los elementos de menú inhabilitados, las etiquetas de los botones, etc. En este ejemplo, el elemento INPUT está deshabilitado. Por lo tanto, no puede recibir entrada de usuario ni su valor se presentará con el formulario. Nota. La única manera de modificar dinámicamente el valor del atributo disabled es a través de un script. readonly CI When set for a form control, this boolean attribute prohibits changes to the control. The readonly attribute specifies whether the control may be modified by the user. When set, the readonly attribute has the following effects on an element: Read-only elements receive focus but cannot be modified by the user. Read-only elements are included in tabbing navigation . Read-only elements may be successful . The following elements support the readonly attribute: INPUT and TEXTAREA . How read-only elements are rendered depends on the user agent. Nota. The only way to modify dynamically the value of the readonly attribute is through a script. The following sections explain how user agents submit form data to form processing agents. The method attribute of the FORM element specifies the HTTP method used to send the form to the processing agent. This attribute may take two values: get: With the HTTP get method, the form data set is appended to the URI specified by the action attribute (with a question-mark () as separator) and this new URI is sent to the processing agent. post: With the HTTP post method, the form data set is included in the body of the form and sent to the processing agent. The get method should be used when the form is idempotent (i. e. causes no side-effects). Many database searches have no visible side-effects and make ideal applications for the get method. If the service associated with the processing of a form causes side effects (for example, if the form modifies a database or subscription to a service), the post method should be used. Nota. The get method restricts form data set values to ASCII characters. Only the post method (with enctype multipart/form-data) is specified to cover the entire ISO10646 character set. A successful control is valid for submission. Every successful control has its control name paired with its current value as part of the submitted form data set. A successful control must be defined within a FORM element and must have a control name. Controls that are disabled cannot be successful. If a form contains more than one submit button. only the activated submit button is successful. All on checkboxes may be successful. For radio buttons that share the same value of the name attribute, only the on radio button may be successful. For menus. the control name is provided by a SELECT element and values are provided by OPTION elements. Only selected options may be successful. When no options are selected, the control is not successful and neither the name nor any values are submitted to the server when the form is submitted. The current value of a file select is a list of one or more file names. Upon submission of the form, the contents of each file are submitted with the rest of the form data. The file contents are packaged according to the forms content type . The current value of an object control is determined by the objects implementation. If a control doesnt have a current value when the form is submitted, user agents are not required to treat it as a successful control. Furthermore, user agents should not consider the following controls successful: Hidden controls and controls that are not rendered because of style sheet settings may still be successful. For example: will still cause a value to be paired with the name invisible-password and submitted with the form. When the user submits a form (e. g. by activating a submit button ), the user agent processes it as follows. Step one: Identify the successful controls Step two: Build a form data set The form data set is then encoded according to the content type specified by the enctype attribute of the FORM element. Finally, the encoded data is sent to the processing agent designated by the action attribute using the protocol specified by the method attribute. This specification does not specify all valid submission methods or content types that may be used with forms. However, HTML 4 user agents must support the established conventions in the following cases: If the method is get and the action is an HTTP URI, the user agent takes the value of action. appends a to it, then appends the form data set. encoded using the application/x-www-form-urlencoded content type. The user agent then traverses the link to this URI. In this scenario, form data are restricted to ASCII codes. If the method is post and the action is an HTTP URI, the user agent conducts an HTTP post transaction using the value of the action attribute and a message created according to the content type specified by the enctype attribute. For any other value of action or method. behavior is unspecified. User agents should render the response from the HTTP get and post transactions. The enctype attribute of the FORM element specifies the content type used to encode the form data set for submission to the server. User agents must support the content types listed below. Behavior for other content types is unspecified. This is the default content type. Forms submitted with this content type must be encoded as follows: Control names and values are escaped. Space characters are replaced by . and then reserved characters are escaped as described in RFC1738. section 2.2: Non-alphanumeric characters are replaced by HH. a percent sign and two hexadecimal digits representing the ASCII code of the character. Line breaks are represented as CR LF pairs (i. e. 0D0A ). The control names/values are listed in the order they appear in the document. The name is separated from the value by and name/value pairs are separated from each other by amp . Nota. Please consult RFC2388 for additional information about file uploads, including backwards compatibility issues, the relationship between multipart/form-data and other content types, performance issues, etc. Please consult the appendix for information about security issues for forms . The content type application/x-www-form-urlencoded is inefficient for sending large quantities of binary data or text containing non-ASCII characters. The content type multipart/form-data should be used for submitting forms that contain files, non-ASCII data, and binary data. The content multipart/form-data follows the rules of all multipart MIME data streams as outlined in RFC2045. The definition of multipart/form-data is available at the IANA registry. A multipart/form-data message contains a series of parts, each representing a successful control. The parts are sent to the processing agent in the same order the corresponding controls appear in the document stream. Part boundaries should not occur in any of the data how this is done lies outside the scope of this specification. As with all multipart MIME types, each part has an optional Content-Type header that defaults to text/plain. User agents should supply the Content-Type header, accompanied by a charset parameter. Each part is expected to contain: a Content-Disposition header whose value is form-data. a name attribute specifying the control name of the corresponding control. Control names originally encoded in non-ASCII character sets may be encoded using the method outlined in RFC2045 . Thus, for example, for a control named mycontrol, the corresponding part would be specified: As with all MIME transmissions, CR LF (i. e. 0D0A ) is used to separate lines of data. Each part may be encoded and the Content-Transfer-Encoding header supplied if the value of that part does not conform to the default (7BIT) encoding (see RFC2045. section 6) If the contents of a file are submitted with a form, the file input should be identified by the appropriate content type (e. g. application/octet-stream). If multiple files are to be returned as the result of a single form entry, they should be returned as multipart/mixed embedded within the multipart/form-data. The user agent should attempt to supply a file name for each submitted file. The file name may be specified with the filename parameter of the Content-Disposition: form-data header, or, in the case of multiple files, in a Content-Disposition: file header of the subpart. If the file name of the clients operating system is not in US-ASCII, the file name might be approximated or encoded using the method of RFC2045. This is convenient for those cases where, for example, the uploaded files might contain references to each other (e. g. a TeX file and its. sty auxiliary style description). The following example illustrates multipart/form-data encoding. Suppose we have the following form: If the user enters Larry in the text input, and selects the text file file1.txt, the user agent might send back the following data: If the user selected a second (image) file file2.gif, the user agent might construct the parts as follows:Sending and Receiving Binary Data Receiving binary data using JavaScript typed arrays The r esponseType property of the XMLHttpRequest object can be set to change the expected response type from the server. Possible values are the empty string (default), arraybuffer. blob. document. json. and text. The response property will contain the entity body according to responseType. as an ArrayBuffer. Blob. Document. JSON. or string. This is null if the request is not complete or was not successful. This example reads an image as a binary file and creates an 8-bit unsigned integer array from the raw bytes. Note that this will not decode the image and read the pixels. You will need a png decoding library for that. An alternative to the above method utilizes the Blob interface to directly construct a Blob with the arraybuffer data. Also you can read a binary file as a Blob by setting the string blob to the responseType property. Receiving binary data in older browsers The loadbinaryresource() function shown below loads binary data from the specified URL, returning it to the caller. The magic happens in line 5, which overrides the MIME type, forcing the browser to treat it as plain text, using a user-defined character set. This tells the browser not to parse it, and to let the bytes pass through unprocessed. The example above fetches the byte at offset x within the loaded binary data. The valid range for x is from 0 to filestream. length-1 . Receiving binary data anywhere jBinary library for working with binary data in JavaScript allows to load data from any source with automatically detected best supported way on current browser or Node. js: Sending binary data The send method of the XMLHttpRequest has been extended to enable easy transmission of binary data by accepting an ArrayBuffer. Blob. or File object. The following example sends creates a text file on-the-fly and uses the POST method to send the file to the server. This example uses plain text, but you can imagine the data being a binary file instead. Sending typed arrays as binary data You can send JavaScript typed arrays as binary data as well. This is building a 512-byte array of 8-bit integers and sending it you can use any binary data youd like, of course. Note: Support for sending ArrayBuffer objects using XMLHttpRequest was added to Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6). Add information about other browsers support here. Submitting forms and uploading files Firefox-specific examples This example transmits binary content asynchronously, using the POST method, and Firefoxs non-standard sendAsBinary() . Line 4 sets the Content-Length header to 741, indicating that the data is 741 bytes long. Obviously you need to change this value based on the actual size of the data being sent. Line 5 uses the sendAsBinary() method to initiate the request. Note: This non-standard sendAsBinary method is considered deprecated as of Gecko 31 (Firefox 31 / Thunderbird 31 / SeaMonkey 2.28) and will be removed soon. The standard send(Blob data) method can be used instead as explained above. You can also send binary content by passing an instance of the nsIFileInputStream to send(). In that case, you dont have to set the Content-Length header yourself, as the information is fetched from the stream automatically: Document Tags and Contributors
No comments:
Post a Comment