2010-10-05 13 views
8

Algo debe disparar, ¿no? no consigo apoyado en IE8 y nada sucede en Fx 3.6.10Hacer onpropertychange y domattrmodified trabajo para detectar cuándo se cambian los elementos

<html> 
<head> 
<script src="http://code.jquery.com/jquery-1.4.2.js"></script> 
<script> 


// modified from http://pragmatec.blogspot.com/2009/06/google-toolbar-style-and-tooltip.html 
jQuery(function($){ 
    $.fn.dommodhandler = function(options){ 
    function setListeners(){ 
     if (typeof (this.onpropertychange) == "object"){ 
     $('#innerDiv').bind('propertychange',function(e){ 
      $('#msgDiv').html(this.id+' changed</br/>'); 
     }); 
     } 
     else if ($.browser.mozilla){ 
     $('#msgDiv').html("bind"); 
     $('#innerDiv').bind('DOMAttrModified',function(e){ 
      $('#msgDiv').html(this.id+' changed</br/>'); 
     }); 
     } 
     else { 
     $('#msgDiv').html('not supported in this browser'); 
     return false; 
     } 
    } 
    return setListeners(); 
    } 
    } 
); 
$(document).ready(function(){ 
    $.fn.dommodhandler(); 
}); 

</script> 
</head> 
<body> 
<div id="wrapper"> 
<a href="#" onClick="document.getElementById('innerDiv').height='300px';document.getElementById('innerDiv').innerHTML=new Date(); return false">Click</a> 
    <div id="outerDiv"> 
    <div id="innerDiv">Hello</div> 
    </div> 
    <div id="msgDiv"></div>  
</div> 

</body> 
</html> 

ACTUALIZACIÓN: Todavía no es feliz ... Alguien tiene alguna sugerencia para detectar cuando algo (Ajax) cambiar la altura real de una div debido a la mayor o menor contenido de

+0

que cambiaría si '(typeof (this.onpropertychange) == "objeto") 'to' if ("onpropertychange" en esto) '. En el caso en que el elemento tenga un controlador 'onpropertychange',' typeof' podría devolver '" function "'. – gilly3

+0

Gracias por el comentario. – mplungjan

Respuesta

2

Si realmente cambiar un atributo, se activa el evento (FF 3.6.10): http://jsfiddle.net/Nw4rA/

+0

Interesante: no se activó cuando cambié la altura, por lo que tienes una sugerencia sobre cómo puedo activar el script cuando el contenido cambia el tamaño del div, ya que onresize no se activa en navegadores que no sean IE – mplungjan

+0

Eso es complicado, hasta donde se. ¿Sería suficiente para usted escuchar el evento de cambio de tamaño de la ventana? $ (ventana) .bind ('resize', function (event) {...})? De lo contrario, es posible que deba trabajar con eventos personalizados que activa cada vez que cambia el tamaño de su div. – Thomas

+0

Eso es lo que pensé que había hecho anteriormente. Y se activará cuando se cambie el tamaño del div, no cuando cambie el tamaño del div. Eso fue solo una demostración – mplungjan

Cuestiones relacionadas