From 63f19a95b9bfffdc7b8800f89a9def768cc3aebd Mon Sep 17 00:00:00 2001 From: Timmy Willison Date: Mon, 15 Jun 2015 11:02:08 -0400 Subject: [PATCH] Offset: return zeros for disconnected/hidden elements Fixes gh-2310 Close gh-2396 --- src/offset.js | 5 ++++- test/unit/offset.js | 22 ++++++++-------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/offset.js b/src/offset.js index 69a414958..d184016e9 100644 --- a/src/offset.js +++ b/src/offset.js @@ -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() { diff --git a/test/unit/offset.js b/test/unit/offset.js index b6ec93de6..d549f35b1 100644 --- a/test/unit/offset.js +++ b/test/unit/offset.js @@ -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("
").appendTo("#qunit-fixture"); + expect( 2 ); - try { + var node = jQuery("
").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) { -- 2.39.5