Skip to content

Commit 63f19a9

Browse files
committed
Offset: return zeros for disconnected/hidden elements
Fixes gh-2310 Close gh-2396
1 parent ee69e9c commit 63f19a9

File tree

2 files changed

+12
-15
lines changed

2 files changed

+12
-15
lines changed

src/offset.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jQuery.offset = {
3939
elem.style.position = "relative";
4040
}
4141

42-
curOffset = curElem.offset() || { top: 0, left: 0 };
42+
curOffset = curElem.offset();
4343
curCSSTop = jQuery.css( elem, "top" );
4444
curCSSLeft = jQuery.css( elem, "left" );
4545
calculatePosition = ( position === "absolute" || position === "fixed" ) &&
@@ -110,6 +110,9 @@ jQuery.fn.extend({
110110
( docElem.clientLeft || 0 )
111111
};
112112
}
113+
114+
// Return zeros for disconnected and hidden elements (gh-2310)
115+
return rect;
113116
},
114117

115118
position: function() {

test/unit/offset.js

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,30 +49,24 @@ test("empty set", function() {
4949
});
5050

5151
test("disconnected element", function() {
52-
expect(1);
53-
54-
var result;
52+
expect( 2 );
5553

56-
try {
57-
result = jQuery( document.createElement("div") ).offset();
58-
} catch ( e ) {}
54+
var result = jQuery( document.createElement( "div" ) ).offset();
5955

60-
ok( !result, "no position for disconnected element" );
56+
equal( result.top, 0, "Retrieving offset on disconnected elements returns zeros (gh-2310)" );
57+
equal( result.left, 0, "Retrieving offset on disconnected elements returns zeros (gh-2310)" );
6158
});
6259

6360
test("hidden (display: none) element", function() {
64-
expect(1);
65-
66-
var result,
67-
node = jQuery("<div style='display: none' />").appendTo("#qunit-fixture");
61+
expect( 2 );
6862

69-
try {
63+
var node = jQuery("<div style='display: none' />").appendTo("#qunit-fixture"),
7064
result = node.offset();
71-
} catch ( e ) {}
7265

7366
node.remove();
7467

75-
ok( !result, "no position for hidden (display: none) element" );
68+
equal( result.top, 0, "Retrieving offset on hidden elements returns zeros (gh-2310)" );
69+
equal( result.left, 0, "Retrieving offset on hidden elements returns zeros (gh-2310)" );
7670
});
7771

7872
testIframe("offset/absolute", "absolute", function($, iframe) {

0 commit comments

Comments
 (0)