Ver Mensaje Individual
  #8 (permalink)  
Antiguo 10/01/2010, 09:19
Avatar de Panino5001
Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Aplicar una funcion a un objeto creado dinamicamente

En cuanto a los eventos hay otras optimizaciones que podés hacer. Sucede que en Explorer (no sé si se solucionó en la versión 8, pero antes ocurría así) maneja 2 motores diferentes para objetos DOM y objetos javascript (2 mundos) y a veces tiene problemas para relacionar ambos mundos y cuando intentamos destruir algo en un mundo termina no destruyéndose porque hay referencias a ese mismo objeto en el otro mundo. Algo que propicia eso es declarar los eventos de esta manera:
Código PHP:
objeto.onclick=function(){...} 
Una manera de no propiciar eso es colocar los eventos vía DOM **. El problema es de nuevo Explorer, que usa su propio estandar y para agregar eventos usa el método attachEvent. Los navegadores estandar usan el método addEventListener. Por eso hay que buscar un camino que se adapte a cada navegador. Para eso pudés usar funciones como esta:
Código PHP:
function addEvent(obj,fun,type){
    if(
obj.addEventListener){
        
obj.addEventListener(type,fun,false);
    }else if(
obj.attachEvent){
        var 
f=function(){
            
fun.call(obj,window.event);
        }
        
obj.attachEvent('on'+type,f);
        
obj[fun.toString()+type]=f;
    }else{
        
obj['on'+type]=fun;
    }
}

function 
removeEvent(obj,fun,type){
    if(
obj.removeEventListener){
        
obj.removeEventListener(type,fun,false);
    }else if(
obj.detachEvent){
        
obj.detachEvent('on'+type,obj[fun.toString()+type]);
        
obj[fun.toString()+type]=null;
    }else{
        
obj['on'+type]=function(){}
    }
        

que sirven para agregar y quitar eventos respectivamente.
Y se usarían, por ejemplo de esta manera:
Código PHP:
addEvent(document.getElementById('algo'),function(e){alert(this.id);},'click'); 
Pero para ver bien los eventos te recomiendo este artículo:
http://kusor.net/traducciones/brainj...rodom1.es.html
**Ojo, esto no soluciona totalmente el problema, pero lo mejora bastante.

Última edición por Panino5001; 10/01/2010 a las 09:25