繁体   English   中英

jQuery UI可调整大小的防火窗口调整大小事件

[英]jQuery UI resizable fire window resize event

我有2个事件,一个用于检测窗口调整大小,另一个用于检测div的可调整大小的停止。

但是当我调整div的大小时,在控制台中检测窗口调整大小事件。

有什么方法可以阻止这个吗?

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

示例: http//jsfiddle.net/qwjDz/1/

所有这些答案都无济于事。 问题是调整大小事件会向窗口冒泡。 所以最终e.target将成为窗口,即使调整大小发生在div上。 所以真正的答案是简单地停止传播resize事件:

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

由于事件冒泡,您会看到此行为。 一种解决方法:使用event.target检查回调中的事件源:

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

演示: http//jsfiddle.net/mattball/HEfM9/


另一个解决方案是向resizable添加一个resize处理程序,并停止事件在DOM树上的传播(即“冒泡”)。 编辑:这应该有效,但出于某种原因不行: http//jsfiddle.net/mattball/5DtdY 。)

我认为最安全的做法是:

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

对我来说,使用JQuery 1.7.2,这里提出的解决方案都没有。 所以我不得不提出一个稍微不同的适用于较旧的IE浏览器以及Chrome ...

$(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");
});

如果元素调整大小不是<div>则可能必须调整它

$(window).resize(function(e) {
  if (e.target == window)
    /* do your stuff here */;
});

http://bugs.jqueryui.com/ticket/7514

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM