2011-09-21 11 views
26

मेरे पास 2 घटनाएं हैं, एक विंडो का आकार बदलने के लिए और दूसरा div के resizable stop का पता लगाने के लिए।jQuery यूआई आकार बदलने योग्य आग खिड़की का आकार बदलें

लेकिन जब मैं 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 हैंडलर जोड़ने और ईवेंट का प्रचार अप को रोकने के लिए है डोम पेड़ (वह "बुलबुला" है)। (संपादित करें: यह काम करना चाहिए, लेकिन किसी कारण से नहीं करता है:। http://jsfiddle.net/mattball/5DtdY)

+2

उपरोक्त क्योंकि op को नहीं पता कि कैसे करें। –

+0

धन्यवाद! यह jQueryUI 1.6 (1.5 से) तक अपग्रेड करने के बाद शुरू हुआ और मुझे नहीं पता था कि क्या गलत था। अब मैं ऊपर की तरह आकार बदलने की घटनाओं को फ़िल्टर कर रहा हूं और यह काम करता है। – BastiBen

+0

@ मैट बॉल - event.target तत्व तत्व ही नहीं है, लेकिन आकार बदलने वाले हैंडलर (कम से कम संस्करण 1.8 में)। तो कक्षा वर्ग की तुलना ** ui-resizable-handle ** से तुलना करना बेहतर होगा या ईवेंट तत्व को विंडो तत्व से ही तुलना करें। – Mohoch

6

मुझे लगता है कि वास्तव में सबसे सुरक्षित निम्न करने के लिए होगा: JQuery 1.7 के साथ,

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

यह IE8 में मेरे लिए काम नहीं करता है, जहां 'event.target 'विंडो 'के समान है। मेरे लिए काम करने वाला एक समाधान माउस निर्देशांक की उपस्थिति की जांच कर रहा है: यदि 'event.clientX' परिभाषित किया गया है, तो यह एक jQuery पुन: प्रयोज्य घटना है। यदि 'event.clientX' परिभाषित नहीं किया गया है, तो यह एक" सत्य "विंडो का आकार बदलता है। – Blaise

3

मेरे लिए .2 यहां प्रस्तावित समाधान में से कोई भी काम नहीं करता है। तो मैं एक अलग से एक है कि पुराने IE ब्राउज़र के साथ ही क्रोम पर काम करता है साथ आने के लिए ... था

$(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

यह जाने का सबसे अच्छा तरीका है (लक्ष्य के साथ हैकिंग या क्लाइंटएक्स भी समस्याएं पैदा करेगा)। – suda