]> source.dussan.org Git - jquery.git/commitdiff
Offset: return zeros for disconnected/hidden elements
authorTimmy Willison <timmywillisn@gmail.com>
Mon, 15 Jun 2015 15:02:08 +0000 (11:02 -0400)
committerTimmy Willison <timmywillisn@gmail.com>
Tue, 16 Jun 2015 14:55:51 +0000 (10:55 -0400)
Fixes gh-2310
Close gh-2396

src/offset.js
test/unit/offset.js

index 69a4149583482b44d835ab8f9c9167546d2a2601..d184016e91ef3e84f98d6bf3bb33b6ad0ed8e691 100644 (file)
@@ -39,7 +39,7 @@ jQuery.offset = {
                        elem.style.position = "relative";
                }
 
-               curOffset = curElem.offset() || { top: 0, left: 0 };
+               curOffset = curElem.offset();
                curCSSTop = jQuery.css( elem, "top" );
                curCSSLeft = jQuery.css( elem, "left" );
                calculatePosition = ( position === "absolute" || position === "fixed" ) &&
@@ -110,6 +110,9 @@ jQuery.fn.extend({
                                        ( docElem.clientLeft || 0 )
                        };
                }
+
+               // Return zeros for disconnected and hidden elements (gh-2310)
+               return rect;
        },
 
        position: function() {
index b6ec93de63d593fcc8df01eaa4698ae43379c0b5..d549f35b16457ae3b2100d57d94f0aa860fa4573 100644 (file)
@@ -49,30 +49,24 @@ test("empty set", function() {
 });
 
 test("disconnected element", function() {
-       expect(1);
-
-       var result;
+       expect( 2 );
 
-       try {
-               result = jQuery( document.createElement("div") ).offset();
-       } catch ( e ) {}
+       var result = jQuery( document.createElement( "div" ) ).offset();
 
-       ok( !result, "no position for disconnected element" );
+       equal( result.top, 0, "Retrieving offset on disconnected elements returns zeros (gh-2310)" );
+       equal( result.left, 0, "Retrieving offset on disconnected elements returns zeros (gh-2310)" );
 });
 
 test("hidden (display: none) element", function() {
-       expect(1);
-
-       var result,
-               node = jQuery("<div style='display: none' />").appendTo("#qunit-fixture");
+       expect( 2 );
 
-       try {
+       var node = jQuery("<div style='display: none' />").appendTo("#qunit-fixture"),
                result = node.offset();
-       } catch ( e ) {}
 
        node.remove();
 
-       ok( !result, "no position for hidden (display: none) element" );
+       equal( result.top, 0, "Retrieving offset on hidden elements returns zeros (gh-2310)" );
+       equal( result.left, 0, "Retrieving offset on hidden elements returns zeros (gh-2310)" );
 });
 
 testIframe("offset/absolute", "absolute", function($, iframe) {