Retocando Formularios (episodio I)

En numerosas ocasiones nos encontramos con campos de formulario que inicialmente incluyen un texto, bien sea con el objetivo de conseguir un nivel de accesibilidad AAA al pie de la letra (punto de verificación 10.4 de las WCAG 1.0), bien por ofrecer una ayuda al usuario indicándole el tipo de contenido a introducir.

Campo de texto relleno

Asimismo, en no menos casos, al recaer el foco sobre el campo en cuestión, el texto que habí­a inicialmente se borra dejándonos escribir lo que deseemos. La cuestión es que si no escribimos nada… ¿por qué no hacer que vuelva el texto inicial?. Tal vez luego quiera volver a ese campo de formulario para escribir algo.

Comportamiento al recaer el foco sobre el campo de texto (se vací­a)

Problema

Queremos restaurar el texto original de los campos del formulario.

Solución

Un script que guarde en una matriz dichos valores y que, al perder el foco el campo de formulario, permita restaurarlos.

El script

El script se detalla a continuación, pudiendo acceder al ejemplo demostrativo o incluso descargarlo.

Para poder utilizarlo, únicamente hay que enlazarlo en la cabecera del documento (<script type="text/javascript" src="ruta/simple.js"></script>). Además, la ausencia de funcionalidad del mismo a causa de que el navegador no lo soporte no implica pérdida alguna ni disminución de la accesibilidad para el usuario.

Lo primero es revisar todos los campos que vamos a controlar mediante este script:

var inputs = document.getElementsByTagName("input");
var textareas =  document.getElementsByTagName("textarea");

Guardamos los valores iniciales:

var valorinicial = new Array();

Asignamos a los campos en los que se puede introducir texto las funciones necesarias para vaciar su contenido o restaurarlo al original según las circunstancias:

function formulario() {
  for (var i = 0; i < inputs.length; i++) {
    if((inputs[i].type == "text") || (inputs[i].type == "password")) {
      valorinicial[inputs[i].id]=inputs[i].value;
       inputs[i].onfocus = function() {vacia(this.id,this.value)}
      inputs[i].onblur = function() {restaura(this.id,this.value)}
    }
  }
  for (var i = 0; i < textareas.length; i++) {
    valorinicial[textareas[i].id]=textareas[i].value;
    textareas[i].onfocus = function() {vacia(this.id,this.value)}
    textareas[i].onblur = function() {restaura(this.id,this.value)}
  }
}

Vaciamos los campos únicamente cuando su contenido sea el mismo que el inicial:

function vacia(id,valor){
  var targetElement = document.getElementById(id);
  var tipo = targetElement.type;
  switch ( tipo ) {
    case "text":
      if (valorinicial[id] == valor)
        targetElement.value = "";
      break
    case "password":
      if (valorinicial[id] == valor)
        targetElement.value = "";
      break
    case "textarea":
      if (valorinicial[id] == valor) {
        targetElement.innerHTML = "";
        targetElement.value = "";
      }
    break
  }
}

Restauramos el contenido de los campos en el caso de no haber introducido nada o únicamente espacios en blanco (y/o retornos de carro en los textarea):

function restaura(id){
  var targetElement = document.getElementById(id);
  var tipo = targetElement.type;
  switch ( tipo ) {
    case "text":
      if (targetElement.value.replace(/ /g, '') == '')
        targetElement.value = valorinicial[id];
      break
    case "password":
      if (targetElement.value.replace(/ /g, '') == '')
        targetElement.value = valorinicial[id];
      break
    case "textarea":
      revisa = targetElement.value.replace(/ /g, '');
      // Eliminamos saltos de lí­nea y tabulaciones
      revisa = revisa.replace(/n/g, '')
      revisa = revisa.replace(/t/g, '')
      revisa = revisa.replace(/r/g, '')
      if (revisa == '') {
        targetElement.innerHTML = valorinicial[id];
        targetElement.value = valorinicial[id];
      }
      break
  }
}

…y finalmente cargamos la función:

window.onload = formulario;

Esta entrada fue publicada en Javascript. Guarda el enlace permanente.

3 respuestas a Retocando Formularios (episodio I)

  1. Pingback: Niquelao » Retocando Formularios (Episodio II)

  2. Pingback: Niquelao » Archivo del weblog » Retocando Formularios, Episodio III (”El Retorno”)

  3. Pingback: Niquelao » Archivo del weblog » Y más formularios… jarl!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>