Foros del Web » Programando para Internet » Javascript »

Problema con onblur

Estas en el tema de Problema con onblur en el foro de Javascript en Foros del Web. Hola Ayer a raíz de una consulta me acordé que había dejado aparcado un problema que aún no se como solucionar Se trata de un ...
  #1 (permalink)  
Antiguo 30/06/2009, 07:33
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Problema con onblur

Hola

Ayer a raíz de una consulta me acordé que había dejado aparcado un problema que aún no se como solucionar

Se trata de un autocomplete

Ante el evento onkeyup se muestra una capa con las distintas opciones.

Código javascript:
Ver original
  1. window.onload = function () {
  2. var elemText = document.getElementById("txt");
  3.        
  4.     elemText.onkeyup = function() {
  5.         muestraDIV(elemento.value);
  6.         }
  7.  
  8.     elemText.onblur = function () {
  9.         var ref = document.getElementById("contenedor").getElementsByTagName("A");
  10.         for (var i = 0; i < ref.length; i++) {
  11.         ref[i].id.onclick = rellenarCaja(ref[i].id);
  12.         }
  13.         }
  14.  
  15. }

Cuando el evento es onblur, saco todos los elementos que hay en la capa que se ha desplegado y cuando se hace click en uno de ellos, llama a la función rellenarCaja, que rellena el campo de texto.

Código javascript:
Ver original
  1. function rellenarCaja(texto) {    
  2. var elemDiv = document.getElementById("contenedor");
  3.  
  4.     if (texto.length == "") {
  5.          elemDiv.style.display= "none";    
  6.     }
  7.     else
  8.     {
  9.         document.getElementById("txt").value = texto;
  10.                 elemDiv.style.display= "none";    
  11.     }
  12. }

Y aquí el problema, al quitar el foco del campo de texto, siempre me rellena la caja con el último elemento, da igual que haga click en la capa o en cualquier otra parte de la ventana.

Lo que quiero que ocurra.
+ Cuando el text pierda el foco, por que se haya clickeado en una de las opciones, se oculte la capa e imprima en el text la opción seleccionada.
+ Cuando el text pierda el foco, por que se haya clickeado en cualquier parte de la ventana, excepto en la capa, se oculte la capa.

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #2 (permalink)  
Antiguo 30/06/2009, 09:35
 
Fecha de Ingreso: agosto-2008
Mensajes: 20
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Problema con onblur

mira no soy un experto pero visto que nadie te ayuda voy a darte mi punto de vista "logico" y no por ello funcional. tu haces el llamado de la funcion rellenarCaja en cada elemento del for y por ende te esta quedando el ultimo elemento de la lista por que el for recorre hasta el final y es ahi que deja el ultimo .
yo trataria de no utilizar el for de esa forma y buscaria una forma de cortar el for con una segunda condicion para que se corte en el momento que encuentre tu opcion deseada ... espero haber sido lo suficientemente claro
ya que no lo soy muy seguido
  #3 (permalink)  
Antiguo 30/06/2009, 12:48
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Problema con onblur

Gracias, elzurdor87 pero ........ no es ese el problema. Si se te ocurre algo más ....
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #4 (permalink)  
Antiguo 30/06/2009, 12:52
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problema con onblur

Puedes asignar el evento onclick a window (window.addEventListener o window.attachEvent dependiendo del navegador); así, si se produce ese evento, ocultas la capa. Si se hizo click en la capa, quitar el onclick del window.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 01/07/2009, 11:30
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Problema con onblur

Hola

¿Es esto a lo que te referías?

Código javascript:
Ver original
  1. function Evento(elemento,nomevento,funcion) {
  2.   if (elemento.attachEvent)
  3.   {
  4.       var f=function(){
  5.         funcion.call(elemento,window.event);
  6.     }
  7.     elemento.attachEvent('on'+nomevento,f);
  8.     return true;
  9.   }
  10.   else  
  11.     if (elemento.addEventListener)
  12.     {
  13.       elemento.addEventListener(nomevento,funcion,false);
  14.       return true;
  15.     }
  16.     else
  17.       return false;
  18. }
  19.  
  20.  
  21.  
  22. window.onload = function () {
  23. var elemento = document.getElementById("txt");
  24. var elementoDIV = document.getElementById("contenedor");
  25.    
  26.     elemento.onkeyup = function() {
  27.         muestraDIV(elemento.value);
  28.         }
  29.  
  30.     window.onclick = function () {
  31.         OcultarDiv();
  32.         }
  33.  
  34. }
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41. function RellenarCaja(valor) { 
  42. var obj = captura_objeto("contenedor")
  43.         document.getElementById("txt").value = valor;
  44.                 obj.style.display= "none";     
  45. }
  46.  
  47.  
  48.  
  49.  
  50.  
  51. function OcultarDiv() {
  52. var obj = captura_objeto("contenedor")
  53.                 obj.style.display= "none"; 
  54.    
  55. }


El ResponseText trae javascript

Código javascript:
Ver original
  1. <script type="tex/javascript">
  2. var ref = document.getElementById('contenedor').getElementsByTagName('a');
  3. for (var i = 0; i < ref.length; i++) {
  4.   Evento(ref[i], 'click', function() {
  5.       RellenarCaja(this.id);
  6. })    
  7. }
  8. </script>

Tal y como esta funciona, pero ... ¿alguna sugerencia. algo que creas que debo modificar,....?

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #6 (permalink)  
Antiguo 02/07/2009, 06:48
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problema con onblur

Me alegra que te haya funcionado.

Lo que sí puedes cambiar (aunque igual no tiene mucha relevancia), aprovechar que tienes la función Evento() lo usas también para asignar el onkeyup y onclick de window y elemento.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 02/07/2009, 12:47
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Problema con onblur

Hola

onkeyup, sí podría manejarla con la escucha, pero la función ocultaDiv y RellenarCaja se lanzan con onclick. ¿No entrarían en conflicto? Quiero decir que como se sabría a que función se está llamando si ambas se ejecutan con el mismo evento?

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
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 23:00.