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); + expect( 2 ); - var result; + var result = jQuery( document.createElement( "div" ) ).offset(); - try { - result = jQuery( document.createElement("div") ).offset(); - } catch ( e ) {} - - 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); + expect( 2 ); - var result, - node = jQuery("
").appendTo("#qunit-fixture"); - - 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) {