Commit 63f19a95 authored by Timmy Willison's avatar Timmy Willison

Offset: return zeros for disconnected/hidden elements

Fixes gh-2310
Close gh-2396
parent ee69e9c8
...@@ -39,7 +39,7 @@ jQuery.offset = { ...@@ -39,7 +39,7 @@ jQuery.offset = {
elem.style.position = "relative"; elem.style.position = "relative";
} }
curOffset = curElem.offset() || { top: 0, left: 0 }; curOffset = curElem.offset();
curCSSTop = jQuery.css( elem, "top" ); curCSSTop = jQuery.css( elem, "top" );
curCSSLeft = jQuery.css( elem, "left" ); curCSSLeft = jQuery.css( elem, "left" );
calculatePosition = ( position === "absolute" || position === "fixed" ) && calculatePosition = ( position === "absolute" || position === "fixed" ) &&
...@@ -110,6 +110,9 @@ jQuery.fn.extend({ ...@@ -110,6 +110,9 @@ jQuery.fn.extend({
( docElem.clientLeft || 0 ) ( docElem.clientLeft || 0 )
}; };
} }
// Return zeros for disconnected and hidden elements (gh-2310)
return rect;
}, },
position: function() { position: function() {
......
...@@ -49,30 +49,24 @@ test("empty set", function() { ...@@ -49,30 +49,24 @@ test("empty set", function() {
}); });
test("disconnected element", function() { test("disconnected element", function() {
expect(1); expect( 2 );
var result;
try { var result = jQuery( document.createElement( "div" ) ).offset();
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() { test("hidden (display: none) element", function() {
expect(1); expect( 2 );
var result,
node = jQuery("<div style='display: none' />").appendTo("#qunit-fixture");
try { var node = jQuery("<div style='display: none' />").appendTo("#qunit-fixture"),
result = node.offset(); result = node.offset();
} catch ( e ) {}
node.remove(); 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) { testIframe("offset/absolute", "absolute", function($, iframe) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment