簡體   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