Showing with 20 additions and 15 deletions.
  1. +3 −0 src/offset.js
  2. +9 −1 test/unit/core.js
  3. +8 −14 test/unit/offset.js
@@ -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() {
@@ -36,6 +36,10 @@ test("jQuery()", function() {
expected++;
attrObj["width"] = 10;
}
if ( jQuery.fn.offset ) {
expected++;
attrObj["offset"] = { "top": 1, "left": 1 };
}
if ( jQuery.fn.css ) {
expected += 2;
attrObj["css"] = { "paddingLeft": 1, "paddingRight": 1 };
@@ -101,12 +105,16 @@ test("jQuery()", function() {
elem = jQuery("\n\n<em>world</em>")[0];
equal( elem.nodeName.toLowerCase(), "em", "leading newlines" );

elem = jQuery( "<div/>", attrObj );
elem = jQuery("<div/>", attrObj );

if ( jQuery.fn.width ) {
equal( elem[0].style.width, "10px", "jQuery() quick setter width");
}

if ( jQuery.fn.offset ) {
equal( elem[0].style.top, "1px", "jQuery() quick setter offset");
}

if ( jQuery.fn.css ) {
equal( elem[0].style.paddingLeft, "1px", "jQuery quick setter css");
equal( elem[0].style.paddingRight, "1px", "jQuery quick setter css");
@@ -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) {