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

ils*_*abs 28 javascript jquery resize resizable

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

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

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

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

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

Bjo*_*orn 26

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

$("#mydiv").resizable().on('resize', function (e) {
    e.stopPropagation(); 
});
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的方法(黑客攻击目标甚至clientX只会导致问题). (4认同)

Mat*_*all 23

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

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

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


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


小智 6

我认为最安全的做法是:

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