]> 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:11 +0000 (10:55 -0400)
Fixes gh-2310
Close gh-2396

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

index a6aa2f1d5dcd0989b4812858a5c6bd46ba9f539c..fcb7b14de15835b95d481086fb8162ad4dabf57c 100644 (file)
@@ -32,7 +32,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" ) &&
@@ -103,6 +103,9 @@ jQuery.fn.extend({
                                left: rect.left + win.pageXOffset - docElem.clientLeft
                        };
                }
+
+               // Return zeros for disconnected and hidden elements (gh-2310)
+               return rect;
        },
 
        position: function() {
index 7b2ecc905d403fee2d95553a826a1d7aaf3268e7..bffe87dd10cfed52d807ba37ddeb836204451520 100644 (file)
@@ -48,30 +48,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) {