Foros del Web » Programando para Internet » Javascript »

Agregar eventos dinamicamente (attachEvent)

Estas en el tema de Agregar eventos dinamicamente (attachEvent) en el foro de Javascript en Foros del Web. Hola a todos, dispongo de una tabla la cual quiero modificar algunos campos. La idea es que al hacer click en una celda, esta se ...
  #1 (permalink)  
Antiguo 08/08/2007, 03:08
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Agregar eventos dinamicamente (attachEvent)

Hola a todos, dispongo de una tabla la cual quiero modificar algunos campos. La idea es que al hacer click en una celda, esta se convierta en un tampo de texto para poder editarlo. Cuando el foco se vaya de ese campo de texto quiero que el campo de texto se convierta en el antiguo campo pero con el valor modificado.

Asi pues tengo 2 funciones, una que me convierte de "normal" a input text (to_input) y otra que hace la operacion inversa (from_input). El problema surge al insertar el evento onBlur (que deberia llamar a la funcion from_input), no consigo hacerlo. Aqui esta el codigo a ver que hago mal.

Código:
  function to_input(celda,fila){

    tr=document.createElement('td');
    input=document.createElement('input');
    input.setAttribute('type','text');
    input.setAttribute('width','200');
    input.setAttribute('value',celda.innerHTML);
    tr.appendChild(input);
    //input.attachEvent( "onDblClick", from_input);
    input.onDblClick = from_input(this,this.parentNode);
    fila.insertBefore(tr,celda);
    celda.parentNode.removeChild(celda);
    alert(fila.innerHTML);
  }
  
  function from_input(input,celda){
    alert("evento capturado correctamente, valor del input = "+input.value);
  }
Me da error en la instruccion en negrita, alguna sugerencia? Si no se puede hacer asi, como seria con attachEvent (todos los ejemplos que he visto apuntan a funciones sin parametros asi que no me sirven).
PD: El evento es onBlur solo que para hacer pruebas lo hago con onDblClick
  #2 (permalink)  
Antiguo 08/08/2007, 04:22
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Agregar eventos dinamicamente (attachEvent)

Alguna ayuda por favor? Tansolo quisiera saber como añadir un evento a un funcion con parametros
  #3 (permalink)  
Antiguo 08/08/2007, 05:32
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
Re: Agregar eventos dinamicamente (attachEvent)

loading...............


así
Código PHP:
var _This=this;
var 
_parN this.parentNode;
 
input.onDblClick = function(){
    
from_input(_This,_parN);
}; 
connection closed.
__________________

Maborak Technologies
  #4 (permalink)  
Antiguo 08/08/2007, 07:17
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Agregar eventos dinamicamente (attachEvent)

Gracias pero eso no me funciona.

Copio de nuevo el codigo:

Código PHP:
  function from_input(input,celda){
    
alert("evento capturado correctamente "+input.value);
  }

  function 
to_input(celda,fila){

    
td=document.createElement('td');
    
input=document.createElement('input');
    
input.setAttribute('type','text');
    
input.setAttribute('width','200');
    
input.setAttribute('name','nombre');
    
input.setAttribute('value',celda.innerHTML);
    
td.appendChild(input);
    var 
_This=this
    var 
_parN this.parentNode
    
input.onDblClick = function(){ 
      
from_input(_This,_parN); 
    };
    
fila.insertBefore(td,celda);
    
celda.parentNode.removeChild(celda);
    
alert(td.innerHTML);
  } 
El alert del final me printa <INPUT width=200 value="el_que_sea">
Curiosidades: No me printa el atributo name ni type ni el evento onDblClick, alguna sugerencia? Gracias!
  #5 (permalink)  
Antiguo 17/03/2009, 10:05
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años
Puntos: 2
Respuesta: Agregar eventos dinamicamente (attachEvent)

Sé que llega con algo de retraso pero me encontré con este tema y puede que a alguien le vaya bien. Para añadir una función con parámetros sería así:

Código javascript:
Ver original
  1. input.attachEvent("onDblClick", function(){from_input(_This,_parN)}, false);

Al menos esto a mi me funciona, sin embargo, creo que sólo funciona en Explorer por lo que te recomiendo hacer lo siguiente:

Código javascript:
Ver original
  1. if (elemento.addEventListener)
  2. {
  3. input.addEventListener("DblClick", function(){from_input(_This,_parN)}, false);
  4. }
  5. else
  6. {
  7. input.attachEvent("onDblClick", function(){from_input(_This,_parN)}, false);
  8. }

Ahora bien, has de tener cuidado pues el comportamiento no es exactamente igual en Firefox y en Explorer. De hecho, en explorer la función del evento se genera en el momento en que el evento es llamado, mientras que en el firefox la función del evento se genera cuando se añade al objeto pero no se ejecuta hasta que lo llama el evento. Es decir, en el ejemplo anterior, supongamos que la variable _This vale 1, entonces añadimos el evento al objeto, a continuación modificamos _This y le asignamos el valor 2 y por último realizamos la acción que ejecuta el evento. Si nos encontramos en Firefox el parámetro que le llegará a la función será 1 porque en el momento de añadir el evento ese era su valor, mientras que si estamos en explorer el parámetro que se le pasa será 2 porque es lo que vale en el momento en que se ejecuta la acción que llama al evento.

No sé si me he explicado con claridad así que si no es así avisadme que lo intento de nuevo :)

Un saludo
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 00:39.