Foros del Web » Programando para Internet » Javascript »

como ejecutar función dentro de focus

Estas en el tema de como ejecutar función dentro de focus en el foro de Javascript en Foros del Web. Buenas tardes foreros, estoy tratando de pasarme a html5 pero debo tener en cuenta a los navegadores que no lo soportan. estoy empezando con el ...
  #1 (permalink)  
Antiguo 28/06/2011, 11:08
 
Fecha de Ingreso: mayo-2008
Mensajes: 489
Antigüedad: 16 años
Puntos: 8
Pregunta como ejecutar función dentro de focus

Buenas tardes foreros, estoy tratando de pasarme a html5 pero debo tener en cuenta a los navegadores que no lo soportan. estoy empezando con el input del buscador y la etiqueta placeholder

actualmente su funcionamiento lo emulo con onBlur y onFocus en la etiqueta input y una funcón javascript, el problema es que al parecer onBlur genera conflictos con chrome y placeholder ya que me arroja undefined. en fin...

mi solución es poder ejecutar una función dentro de el método focus de javascript
Código Javascript:
Ver original
  1. var txt = "Buscar...";
  2.     var d = document.buscador.q;
  3.     d.value = txt;                
  4.    
  5.     d.focus(
  6.         function () {
  7.             if (d.value == txt) {
  8.                 d.value = "";
  9.             }
  10.         }
  11.     );
el problema es que la función que está dentro de focus no la ejecuta, alguien sabe porque? me podrían recomendar alguna solución que no lleve onFocus y onBlur en la etiqueta input.

muchas gracias y espero me puedan ayudar.
__________________
AppLab - Laboratorio de Ideas
  #2 (permalink)  
Antiguo 28/06/2011, 12:34
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 18 años, 5 meses
Puntos: 87
Respuesta: como ejecutar función dentro de focus

Es colocando esto en la etiqueta
Código HTML:
Ver original
  1. onFocus="clearText(this)" onBlur="clearText(this)" value="busqueda aqui..."

Y este javascript:
Código Javascript:
Ver original
  1. function clearText(field){
  2.    if (field.defaultValue == field.value){ field.value = ''}
  3.      else if (field.value == '') {field.value = field.defaultValue};
  4. }

Y eso es todo...

PD: decir "espero me puedan ayudar" es algo absolutamente innecesario; ya de por si cualquiera que este viendo foros de problemas ajenos no respondidos lo hace con el unico fin de resolver la inquietud de serle posible.
  #3 (permalink)  
Antiguo 28/06/2011, 12:53
 
Fecha de Ingreso: mayo-2008
Mensajes: 489
Antigüedad: 16 años
Puntos: 8
Respuesta: como ejecutar función dentro de focus

Gracias InKarC pero la idea, precisamente es no utilizar onBlur y onFocus en la etiqueta input.
__________________
AppLab - Laboratorio de Ideas
  #4 (permalink)  
Antiguo 28/06/2011, 13:20
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 18 años, 5 meses
Puntos: 87
Respuesta: como ejecutar función dentro de focus

la idea? vuestra idea? si busca una solución a un problema y limita las herramientas que puede usar para solucionarlo se esta perjudicando a si mismo.

Chrome y demas navegadores seguiran soportando onfocus y onblur por muchos años mas, pero igualmente por muchos de esos años hay gente que seguirá usando IE8 entre otros navegadores antiguos que no soportan placeholder ni nada html5.
  #5 (permalink)  
Antiguo 28/06/2011, 13:43
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 18 años, 5 meses
Puntos: 87
Respuesta: como ejecutar función dentro de focus

Aqui esta la solución en el supuesto caso en el que no se pudieran colocar etiquetas al input

Código Javascript:
Ver original
  1. if(!document.createElement('canvas').getContext){ // Solo aplica para navegadores no-html5
  2.     var nombre = document.getElementsByName("nombre")[0]
  3.     var mensaje = nombre.getAttribute("placeholder");
  4.     nombre.value = mensaje;
  5.    
  6.     if (nombre.addEventListener){
  7.       nombre.addEventListener('focus', clearText, false);
  8.       nombre.addEventListener('blur', clearText, false);
  9.     } else if (nombre.attachEvent){
  10.       nombre.attachEvent('onfocus', clearText);
  11.       nombre.attachEvent('onblur', clearText);
  12.     }
  13.    
  14.     function clearText(field){
  15.     if (mensaje == nombre.value){ nombre.value = ''}
  16.     else if (nombre.value == '') {nombre.value = mensaje};
  17.     }
  18. }
  #6 (permalink)  
Antiguo 28/06/2011, 14:01
 
Fecha de Ingreso: febrero-2009
Mensajes: 580
Antigüedad: 15 años, 3 meses
Puntos: 13
Respuesta: como ejecutar función dentro de focus

yo lo haría con JQuery

Código:
$('selector').bind('focus',function( {
    //funcion aqui. Do more, write less ;)
  });
__________________
¿ya conoces la red social de cocina? descubre y comparte recetas de cocina
TONIWEB, un programador web freelance
  #7 (permalink)  
Antiguo 28/06/2011, 14:50
 
Fecha de Ingreso: mayo-2008
Mensajes: 489
Antigüedad: 16 años
Puntos: 8
Respuesta: como ejecutar función dentro de focus

Hola InKarC, creo que te estas alterando por nada. te comento:
1 - escribir "espero me puedan ayudar" es un formalismo que denota amabilidad, es cierto que muchos de los que leen post ajenos tienen la intención de ayudar, sin embargo, no es su prioridad y mucho menos su obligación, por lo que es de respetar el tiempo que dediquen a leer mi consulta.
2 - aunque html5 no sea soportado por todos los navegadores actualmente, si lo será en un futuro y mientras tanto quiero ofrecerle a mis vistas la mejor experiencia posible y reducirme el consumo de recursos. (si ya tengo que programar doble para IE y toda sus versiones, que más da hacerlo para html5)
3 - si es mi idea, debido a que yo soy el del problema, sin embargo, no creo que deba sacrificar funcionalidad por comodidad.

agradezco tu ayuda, aunque creo que está pasado de código.

Bam_Margera precisamente había visto un ejemplo en jquery y eso fue lo que me confundió. la solución:

Código Javascript:
Ver original
  1. var txt = "Buscar...";
  2. var d = document.buscador.q;    
  3. d.value = txt;
  4. d.onfocus = function () {
  5.     if (d.value == txt) {d.value = "";}
  6. }
  7. d.onblur = function () {
  8.     if (d.value == "") {d.value = txt;}
  9. }

gracias nuevamente.
__________________
AppLab - Laboratorio de Ideas

Etiquetas: focus
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:27.