2008-09-20 38 views
188

Quiero que el cuadro de búsqueda en mi página web muestre la palabra "Buscar" en cursiva gris. Cuando el cuadro recibe el foco, debe verse como un cuadro de texto vacío. Si ya hay texto en él, debe mostrar el texto normalmente (negro, sin cursivas). Esto me ayudará a evitar el desorden al eliminar la etiqueta.¿Cómo puedo hacer que un cuadro de texto HTML muestre una sugerencia cuando está vacío?

Por cierto, esta es una búsqueda en la página Ajax, por lo que no tiene botón.

+4

ya que la pregunta se hizo HTML5 atributo marcador de posición se ha convertido en el apoyo de todos los navegadores. – Jasen

+0

Hola Michael. ¿Estaría dispuesto a cambiar la respuesta aceptada en esta página? Parece ser un claro ganador, que es diferente a la respuesta aceptada. – nslntmnx

+0

El problema con una solución de JavaScript es que no todos tienen activado JavaScript. El marcador de posición no desaparece cuando el cuadro de texto se enfoca si se usa un complemento de navegador como NoScript (muy útil para los desarrolladores tener instalado). La opción Marcador de posición es la solución más sólida. – Sablefoste

Respuesta

327

Otra opción, si está feliz de tener esta característica sólo para los nuevos navegadores, es utilizar el apoyo ofrecido por el HTML de 5 marcador de posición atributo:

<input name="email" placeholder="Email Address"> 

En ausencia de cualquier estilo, en Chrome será similar a:

enter image description here

puede probar demos a cabo here y en HTML5 Placeholder Styling with CSS.

Asegúrese de consultar browser compatibility of this feature. Se agregó soporte en Firefox en 3.7. Chrome está bien. Internet   Explorer solo agregó soporte en 10. Si se dirige a un navegador que no admite marcadores de posición de entrada, puede usar un complemento jQuery llamado jQuery HTML5 Placeholder, y luego simplemente agregue el siguiente código JavaScript para habilitarlo.

$('input[placeholder], textarea[placeholder]').placeholder(); 
+0

@Duke, funciona en Fx3.7 +, (Safari/Chrome) y Opera.IE9 no lo admite, así que supongo que IE8 tampoco. –

+0

Sí, hoy descubrí que FF3.6 no lo admite. –

+0

Creo que se movió de nuevo. Lo encontré aquí: https://github.com/mathiasbynens/jquery-placeholder – jocull

20

Puede agregar y quitar una clase especial CSS y modificar el valor de entrada onfocus/onblur con JavaScript:

<input type="text" class="hint" value="Search..." 
    onfocus="if (this.className=='hint') { this.className = ''; this.value = ''; }" 
    onblur="if (this.value == '') { this.className = 'hint'; this.value = 'Search...'; }"> 

a continuación, especifique una clase pista con el estilo que desee en su CSS, por ejemplo:

input.hint { 
    color: grey; 
} 
+2

He publicado una respuesta que hace lo mismo pero de una manera más conveniente y sostenible: http://stackoverflow.com/questions/108207/how-do-i-make-an-html-text-box-show -a-hint-when-empty/2994702 # 2994702 –

1

Puede leer fácilmente un cuadro que dice "Buscar" y luego, cuando se cambia el foco, se quita el texto. Algo como esto:

<input onfocus="this.value=''" type="text" value="Search" />

Por supuesto, si usted hace que el propio texto del usuario desaparecerá cuando se haga clic. Así que es probable que desee usar algo más robusto:

<input name="keyword_" type="text" size="25" style="color:#999;" maxlength="128" id="keyword_" 
onblur="this.value = this.value || this.defaultValue; this.style.color = '#999';" 
onfocus="this.value=''; this.style.color = '#000';" 
value="Search Term"> 
6

La mejor manera es que cablear los eventos de JavaScript utilizando algún tipo de biblioteca de JavaScript como jQuery o YUI y poner su código en un Js-archivo externo.

Pero si quieres una solución rápida y sucia, que es vuestro HTML en línea solución:

<input type="text" id="textbox" value="Search" 
    onclick="if(this.value=='Search'){this.value=''; this.style.color='#000'}" 
    onblur="if(this.value==''){this.value='Search'; this.style.color='#555'}" /> 

Actualizado: le añadieron el color-material solicitado.

+0

Esto está bien para las búsquedas, pero en muchos casos no desea que se envíen filigranas en ningún evento de envío. –

+0

@ k.robinson I +1 esa declaración. Este fue el código más rápido y compacto en ese momento. Podría resolverse de forma más precisa con un bloque de código de javascript. –

1

utilizar una imagen de fondo para representar el texto:

input.foo { } 
input.fooempty { background-image: url("blah.png"); } 

Entonces todo lo que tiene que hacer es detectar value == 0 y aplicar la clase derecha:

<input class="foo fooempty" value="" type="text" name="bar" /> 

Y el código jQuery JavaScript parece a esto :

jQuery(function($) 
{ 
    var target = $("input.foo"); 
    target.bind("change", function() 
    { 
     if(target.val().length > 1) 
     { 
      target.addClass("fooempty"); 
     } 
     else 
     { 
      target.removeClass("fooempty"); 
     } 
    }); 
}); 
0

Quieres asignar algo como esto a onfoc nosotros:

if (this.value == this.defaultValue) 
    this.value = '' 
this.className = '' 

y esto a onBlur:

if (this.value == '') 
    this.value = this.defaultValue 
this.className = 'placeholder' 

(se puede usar algo de una inteligente poco, como una función de marco, para hacer el cambio de nombre de clase si lo desea.)

Con algunos CSS como este:

input.placeholder{ 
    color: gray; 
    font-style: italic; 
} 
91

Esto se conoce como una marca de agua de cuadro de texto, y se hace a través de JavaScript.

o si utiliza jQuery, un enfoque mucho mejor:

+4

Ese segundo enlace está roto. Esto podría ser similar: http://digitalbush.com/projects/watermark-input-plugin/ –

+14

Encontré otro enfoque jQuery. este proyecto está alojado en http://code.google.com/p/jquery-watermark/ –

+4

El plugin digitalbrush guardará la 'marca de agua' en la base de datos. Está en versión beta y no se ha actualizado desde 2007. En su lugar, recomiendo utilizar http://code.google.com/p/jquery-watermark/ como se sugirió @JP. –

0

Cuando la página se carga por primera, tienen Buscar aparecer en el texto bo x, color gris si quieres que sea.

Cuando el cuadro de entrada recibe el foco, seleccionar todo el texto en el cuadro de búsqueda para que el usuario sólo puede empezar a escribir, lo que eliminará el texto seleccionado en el proceso. Esto también funciona muy bien si el usuario desea utilizar la caja de búsqueda de una segunda vez, ya que no tendrán que resaltar manualmente el texto anterior para eliminarlo.

<input type="text" value="Search" onfocus="this.select();" /> 
3

Aquí hay un ejemplo funcional con la memoria caché de la biblioteca Google Ajax y algo de magia jQuery.

Ésta sería la CSS:

<style type="text/stylesheet" media="screen"> 
    .inputblank { color:gray; } /* Class to use for blank input */ 
</style> 

Esto sería el código JavaScript:

<script language="javascript" 
     type="text/javascript" 
     src="http://www.google.com/jsapi"> 
</script> 
<script> 
    // Load jQuery 
    google.load("jquery", "1"); 

    google.setOnLoadCallback(function() { 
     $("#search_form") 
      .submit(function() { 
       alert("Submitted. Value= " + $("input:first").val()); 
       return false; 
     }); 

     $("#keywords") 
      .focus(function() { 
       if ($(this).val() == 'Search') { 
        $(this) 
        .removeClass('inputblank') 
        .val(''); 
       } 
      }) 
      .blur(function() { 
       if ($(this).val() == '') { 
        $(this) 
        .addClass('inputblank') 
        .val('Search'); 
       } 
      }); 
    }); 
</script> 

Y este sería el HTML:

<form id="search_form"> 
    <fieldset> 
     <legend>Search the site</legend> 
      <label for="keywords">Keywords:</label> 
     <input id="keywords" type="text" class="inputblank" value="Search"/> 
    </fieldset> 
</form> 

espero que sea lo suficientemente para que se interesa tanto en el GAJAXLibs y en jQuery.

-1
$('input[value="text"]').focus(function(){ 
if ($(this).attr('class')=='hint') 
{ 
    $(this).removeClass('hint'); 
    $(this).val(''); 
} 
}); 

$('input[value="text"]').blur(function(){ 
    if($(this).val() == '') 
    { 
    $(this).addClass('hint'); 
    $(this).val($(this).attr('title')); 
    } 
}); 

<input type="text" value="" title="Default Watermark Text"> 
2

Esto se llama "marca de agua".

me encontré con el plugin jQuery jQuery watermark el cual, a diferencia de la primera respuesta, no requiere configuración adicional (la respuesta original también necesita un llamado especial a antes de enviar el formulario).

2

Encontré el complemento jQuery jQuery Watermark para ser mejor que el que se encuentra en la parte superior. ¿Por qué mejor? Porque admite campos de entrada de contraseña. Además, establecer el color de la marca de agua (u otros atributos) es tan fácil como crear una referencia .watermark en su archivo CSS.

4

he publicado a solution for this on my website hace algún tiempo.Para usarlo, importar un solo archivo .js:

<script type="text/javascript" src="/hint-textbox.js"></script> 

Entonces Anotar cualquier entradas que desea tener toques con la clase CSS hintTextbox:

<input type="text" name="email" value="enter email" class="hintTextbox" /> 

Más información y ejemplo están disponibles here.

+1

Pero está roto. Si ingreso el mismo texto que era la sugerencia, se comporta como si no se hubiera dado ninguna entrada (si lo tabulo y luego lo vuelvo a salir) –

+2

@Stephan: Sí, esa es la única advertencia que conozco. ¿De verdad has descubierto que se trata de un problema en la práctica? Si es así, quizás tengas que investigar superponiendo un div arriba y mostrándolo/escondiéndolo. Esta es la solución más simple que conozco. También me degrada agradablemente si JavaScript está deshabilitado. –

+0

Me activó la configuración del valor. Tengo una necesidad combinada de rellenar previamente con un valor existente o predeterminado y una sugerencia cuando el cuadro de texto está vacío –

39

Puede establecer marcador de posición usando placeholder attribute en HTML (browser support). El font-style y el color pueden ser changed with CSS (aunque el soporte del navegador es limitado).

input[type=search]::-webkit-input-placeholder { /* Safari, Chrome(, Opera?) */ 
 
color:gray; 
 
font-style:italic; 
 
} 
 
input[type=search]:-moz-placeholder { /* Firefox 18- */ 
 
color:gray; 
 
font-style:italic; 
 
} 
 
input[type=search]::-moz-placeholder { /* Firefox 19+ */ 
 
color:gray; 
 
font-style:italic; 
 
} 
 
input[type=search]:-ms-input-placeholder { /* IE (10+?) */ 
 
color:gray; 
 
font-style:italic; 
 
}
<input placeholder="Search" type="search" name="q">

+0

Estaba buscando esto, ta - más información http://diveintohtml5.org/forms.html#placeholder –

+2

Esta debería ser la respuesta aceptada. El atributo de marcador de posición puede no haber sido ampliamente admitido cuando se publicó originalmente en 2010, pero ahora es compatible con todos los navegadores actuales, excepto IE8. – JSP64

2

Uso jQuery Form Notifier - es uno de los plugins más populares de jQuery y no sufre de los errores de algunas de las otras sugerencias jQuery aquí hacer (por ejemplo, puede estilo libremente la marca de agua, sin preocuparse si se guardará en la base de datos).

jQuery Marca de agua utiliza un único estilo CSS directamente en los elementos de formulario (Me di cuenta de que las propiedades font-size CSS aplicados a la marca de agua también afectaron a los cuadros de texto - no es lo que quería). La ventaja con jQuery Watermark es que puedes arrastrar y soltar texto en los campos (jQuery Form Notifier no lo permite).

Otro sugerido por algunos otros (el de digitalbrush.com), enviará accidentalmente el valor de la marca de agua a su formulario, por lo que recomiendo encarecidamente que no lo haga.

0

Me gusta la solución de "Knowledge Chikuse" - simple y clara. Sólo tiene que añadir una llamada a desdibujarse cuando la carga de la página está lista que permitirá establecer el estado inicial:

etiqueta HTML simple 'necesaria'
$('input[value="text"]').blur(); 
-1

es útil.

<form> 
<input type="text" name="test" id="test" required> 
<input type="submit" value="enter"> 
</form> 
+0

Si bien es útil, no tiene nada que ver con la pregunta. – Quentin

Cuestiones relacionadas