1: <!-- Formulario de búsqueda -->2: <form action="/search" method="get">3: <!-- Input que mostrará "Buscar..." en HTML5 y vacío en HTML4 -->4: <input type="text" name="s" caption="Buscar..." value=""/>5: </form>
Tal y como se indica en los comentarios, este formulario mostrará un textbox con el contenido “Buscar…” en navegadores compatibles con HTML5 y no mostrará nada en navegadores más antiguos.
Para conseguir nuestro objetivo de mostrar el caption en todos los navegadores (todos los navegadores compatibles con JQuery), seguiremos los siguientes pasos.
Primero, añadir la referencia a JQuery en nuestro header, si no lo hemos añadido ya.
1: <!-- Insertar JQuery desde su CDN -->2: <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
Segundo, incluir el siguiente código Javascript en nuestra página:
1: <script type="text/javascript">2: $(document).ready(function(){3: // Función a lanzar por cada input de tipo text y4: // con el atributo caption5: $("input[type=text][caption]").each(function(i, elem){6: $(elem).val($(elem).attr("caption")) // Valor inicial7: .addClass("label-caption"); // Clase css para personalizar el estilo8:9: // Función a lanzar por el input cada vez que el usuario10: // seleccione el textbox11: $(elem).focus(function(){12: // El valor actual es igual al caption?13: if ($(elem).attr("caption") == $(elem).val()) {14: // Elimina el valor actual y la clase css personalizada15: $(elem).val("").removeClass("label-caption");16: }17: });18:19: // Función a lanzar por el input cada vez que el usuario20: // deselecciona el textbox21: $(elem).blur(function(){22: // El valor actual está vacío?23: if ("" == $(elem).val()) {24: // Asigna el caption y la clase css personalizada25: $(elem).val($(elem).attr("caption"))26: .addClass("label-caption");27: }28: });29: });30: });31: </script>
Por líneas:
- Línea 5: Selecciona todos los input de tipo text del documento con el atributo caption, y por cada uno realiza las siguientes acciones.
- Líneas 6 y 7: Al cargar la página, establece el valor del input al valor del atributo caption, y asigna la clase css label-caption al input para personalización con css.
- Línea 11: Asocia la función indicada al evento focus del input, el cual será lanzado cuando se seleccione el input.
- Líneas 13 y 15: Si en el momento de seleccionar el textbox, éste tiene el mismo valor que el atributo caption, elimina el valor del input y la clase css label-caption.
- Línea 21: Asocia la función indicada al evento blur del input, el cual se lanzará cuando se quite la selección sobre el textbox.
- Líneas 23, 25 y 26: Si en el momento de soltar el foco sobre el textbox, el valor de éste se encuentra vacío, establece el valor del input al valor del atributo caption y añade la clase css label-caption.