2011-09-21 8 views
26

Tengo 2 eventos, uno para detectar el tamaño de la ventana y otro para detectar la detención del tamaño de div.jQuery UI resize redimensionar el evento de cambio de tamaño de ventana

Pero cuando cambio el tamaño del div, en la consola detecta el evento de cambio de tamaño de la ventana.

¿Hay alguna manera de bloquear esto?

$(document).ready(function(){ 
    $(window).bind('resize', function(){ 
     console.log("resize");  
    }); 
    $(".a").resizable(); 
}); 

Ejemplo: http://jsfiddle.net/qwjDz/1/

+0

Esto tiene que ser un error. No debería tener nada que ver con el cambio de tamaño de la ventana cuando se modifican el ancho y la altura de algunos elementos. –

Respuesta

21

ve este comportamiento debido a la formación de burbujas evento. Una solución: compruebe el origen del evento en la devolución de llamada usando event.target:

$(window).bind('resize', function(event) { 
    if (!$(event.target).hasClass('ui-resizable')) { 
     console.log("resize"); 
    } 
}); 

Demostración: http://jsfiddle.net/mattball/HEfM9/


Otra solución consiste en agregar un controlador resize al tamaño variable y detener la propagación del evento hasta el árbol DOM (que es el "burbujeo"). (Editar: esto debería funcionar, pero por alguna razón no:. http://jsfiddle.net/mattball/5DtdY)

+2

Votación positiva porque op no sabe cómo hacerlo. –

+0

Gracias! Esto comenzó después de actualizar a jQueryUI 1.6 (desde 1.5) y no tenía idea de qué estaba mal. Ahora estoy filtrando los eventos de cambio de tamaño como los de arriba y funciona. – BastiBen

+0

@Matt Ball: el elemento event.target no es el elemento en sí, sino los manejadores de cambio de tamaño (al menos en la versión 1.8). Por lo tanto, sería mejor comparar el nombre de la clase con ** ui-resizable-handle ** o comparar el event.target con el elemento window. – Mohoch

6

creo que en realidad el más seguro habría que hacer lo siguiente:

$(window).bind('resize', function(event) { 
    if (this == event.target) { 
     console.log("resize"); 
    } 
}); 
+1

Esto no funciona para mí en IE8, donde 'event.target 'es lo mismo que' ventana'. Una solución que funciona para mí es verificar la presencia de coordenadas del mouse: si se define 'event.clientX', es un evento de tamaño variable jQuery. Si 'event.clientX' no está definido, se trata de un cambio de tamaño de ventana" verdadero ". – Blaise

3

Para mí, con jQuery 1.7 .2 ninguna de las soluciones propuestas aquí funcionó. Así que tuve que subir con una ligeramente diferente que funciona en los más antiguos navegadores Internet Explorer, así como cromo ...

$(window).bind('resize', function(event) { 
    if ($(event.target).prop("tagName") == "DIV") {return;} // tag causing event is a div (i.e not the window) 
    console.log("resize"); 
}); 

esto podría tener que adaptarse si el elemento cambiado el tamaño es algo más que un <div>

23

Todas estas respuestas no serán de ayuda. El problema es que el evento de cambio de tamaño se dispara hasta la ventana. Entonces, eventualmente el e.target será la ventana incluso si el cambio de tamaño ocurrió en el div. Así que la respuesta real es simplemente dejar de propagar el evento de cambio de tamaño:

$("#mydiv").resizable().on('resize', function (e) { 
    e.stopPropagation(); 
}); 
+3

Este es el mejor camino a seguir (piratear con el objetivo o incluso el clienteX solo causaría problemas). – suda

Cuestiones relacionadas