2011-04-04 16 views
22

मैंने अभी देखा है कि जब भी ब्राउज़र विंडो का आकार बदलता है तो jquery resize ईवेंट दो बार आग लग जाता है। मैं इसे डिफ़ॉल्ट व्यवहार के रूप में सूचीबद्ध करने वाले किसी दस्तावेज़ को ढूंढने में असमर्थ हूं। मैंने jQuery 1.4 और 1.5 का उपयोग करके क्रोम और फ़ायरफ़ॉक्स के नवीनतम संस्करणों में इसका परीक्षण किया है।jQuery दो बार इज़े का आकार क्यों बदलता है?

क्या कोई और इस व्यवहार को देखता है? क्या इसके लिए कोई विशिष्ट कारण है?

अद्यतन: ऐसा होता है यदि मैं एक बार ब्राउज़र विंडो पर अधिकतम बटन क्लिक करता हूं। मैं समझता हूं कि अगर मैं खिड़की को एक अलग आकार में मैन्युअल रूप से खींच रहा हूं, तो ईवेंट को कई बार निकाल दिया जाएगा, लेकिन यह अधिकतम बटन के साथ मामला नहीं होना चाहिए।

इस कोड का उपयोग किया गया कोड नीचे दिया गया है। ब्राउज़र आकार दिया पाठ दो बार उत्पादन होता है:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
     "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <title></title> 
</head> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.js"></script> 
<script type="text/javascript"> 
    $(window).resize(function(){ 
     console.log('Browser Resized'); 
    }); 
</script> 
<body> 

</body> 
</html> 
+1

आंत लग रहा है, और यह वास्तव में ** है ** सिर्फ एक आंत लग रहा है, है कि एक वस्तु परिवर्तन का आकार बदलने के दोनों उसकी लम्बाई और चौड़ाई । मायाप "आकार" घटना प्रत्येक अक्ष पर परिवर्तन के लिए आग लगती है? – tobias86

+0

मुझे लगता है कि पृष्ठ लोड होने पर दो बार आग लगती है क्योंकि ब्राउज़र द्वारा तत्वों को पार्स किए जाने से पहले ईवेंट को तुरंत चालू किया जाता है। जब तत्व बनाए जाते हैं तो आकार बदलने की घटना आग लगती है। बस एक सिद्धांत लेकिन संभव है। तुम क्या सोचते हो? – www139

उत्तर

8

यह jQuery की कोई समस्या नहीं है। यह ब्राउज़र कार्यान्वयन पर निर्भर करता है। ब्राउज़र 'आकार बदलने' को ट्रिगर करने का निर्णय लेता है। और आप परीक्षण करने के लिए window.onresize = function() {...} का उपयोग कर सकते हैं। यह वही होगा। JQuery के साथ कुछ भी नहीं करना है। मैंने विन 7 क्रोम पर परीक्षण किया, इसे दो बार निकाल दिया गया, और विन 7 ओपेरा/सफारी में इसे एक बार निकाल दिया गया।

+0

मैंने अभी ओपेरा 11.52 में परीक्षण किया है और घटना को मेरी मशीन पर दो बार निकाल दिया गया है। –

+2

आपने इसका परीक्षण कैसे किया? मेरा ओपेरा 11.52, विन 7 है, और मैं अधिकतम बटन को टॉगल करके विंडो का आकार बदलता हूं। इसे सफारी 5.11 में केवल एक बार भी कहा जाता है।और मैक ओएस 10, सफारी के साथ, अधिकतम आकार पर क्लिक करते समय आकार बदलने की घटना कई बार निकाल दी जाती है (2 से अधिक)। यह कार्यान्वयन का मामला है। ब्राउज़र 'आकार बदलने' को ट्रिगर करने का निर्णय लेता है। और आप window.onresize = function() {...} का उपयोग कर सकते हैं। यह समान है। JQuery के साथ कुछ भी करने के लिए :) –

-1

मैंने वर्तमान मामले का परीक्षण किया, और मुझे दो कॉल भी मिलती हैं। तो मुझे लगता है, आदि ... यह एक बग है, ऐसा नहीं है, यह एक से पहले/के बाद क्लस्टर समारोह कॉल है ... और मैं आकार() के लिए JQuery 'प्रलेखन के लिए वापस जाओ:

एक आकार बदलने वाले हैंडलर में कोड को हैंडलर कहलाए जाने की संख्या पर कभी भरोसा नहीं करना चाहिए। कार्यान्वयन के आधार पर, आकार बदलने का आयोजन निरंतर भेजा जा सकता है क्योंकि आकार बदल रहा है (इंटरनेट एक्सप्लोरर में सामान्य व्यवहार और सफारी और क्रोम जैसे वेबकिट-आधारित ब्राउज़र), या केवल एक बार आकार बदलने के अंत में (सामान्य व्यवहार में ओपेरा जैसे कुछ अन्य ब्राउज़र)।

कोई अन्य शब्द आवश्यक है?

+0

Thx से नाथन टुगी, टाइपो को सही करने के लिए;) –

0

setTimeout का उपयोग कर समस्या का एक आसान समाधान यहां दिया गया है।

jQuery

var resizeTimeout 
$(window).resize(function(){ 
    clearTimeout(resizeTimeout) 
    resizeTimeout = setTimeout(function(){ 
     console.log("resized") 
    },100) 
}); 

जावास्क्रिप्ट

var resizeTimeout 
window.addEventListener("resize", function(){ 
    clearTimeout(resizeTimeout) 
    resizeTimeout = setTimeout(function(){ 
     console.log("resized") 
    },100) 
}) 
संबंधित मुद्दे