2011-09-21 24 views
26

私は2つのイベント、1つのウィンドウのサイズを検出し、他のdivのサイズ変更可能な停止を検出する必要があります。jQueryのUIのサイズ変更可能なファイアウィンドウのサイズ変更イベント

しかし、私はdivのサイズを変更すると、コンソールでウィンドウのサイズ変更イベントを検出します。

これをブロックする方法はありますか?

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

例:http://jsfiddle.net/qwjDz/1/あなたがあるため、イベントバブリングのこの振る舞いを見

+0

。いくつかの要素の幅と高さが変更されたとき、ウィンドウのサイズ変更とは何の関係もありません。 –

答えて

21

。回避策の一つ:event.targetを使用して、コールバックでのイベントのソースを確認してください。

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

デモ:http://jsfiddle.net/mattball/HEfM9/


別の解決策は、サイズ変更可能にresizeハンドラを追加し、イベントの伝播を停止することですDOMツリー(「バブリング」)。編集:これは動作しますが、何らかの理由でないはずです。http://jsfiddle.net/mattball/5DtdY

+2

Upvoteはオペラが方法を知らないので。 –

+0

ありがとう!これはjQueryUI 1.6(1.5から)にアップグレードした後に始まり、何が間違っているのか分かりませんでした。今は、上記のようなサイズ変更イベントをフィルタリングしています。 – BastiBen

+0

@Matt Ball - event.target要素は要素自体ではなく、サイズ変更ハンドラ(少なくともバージョン1.8では)です。したがって、クラス名を** ui-resizable-handle **と比較するか、またはevent.targetをウィンドウ要素自体と比較する方が良いでしょう。 – Mohoch

6

私は実際に最も安全な、次の操作を実行するだろうと思う:

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

これはIE8では動作しません。 'は' window'と同じです。私のために働く解決策は、マウス座標の存在をチェックすることです: 'event.clientX'が定義されている場合、それはjQueryのサイズ変更可能なイベントです。 'event.clientX'が定義されていない場合、それは"真の "ウィンドウのサイズ変更です。 – Blaise

3

私にとっては、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>

23
以外の何かがある場合、これは適合させなければならないかもしれません

これらの回答はすべて役に立ちません。問題は、サイズ変更イベントがウィンドウまで泡立ちます。だから最終的にe.targetは、たとえサイズ変更がdivに起こったとしてもウィンドウになります。だから、本当の答えは、単純にサイズ変更イベントを伝播停止することです:これはバグである必要はあり

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

これは最善の方法です(ターゲットを使ったハッキン​​グやクライアントXでも問題が発生する)。 – suda

関連する問題