diff options
-rw-r--r-- | src/offset.js | 7 | ||||
-rw-r--r-- | test/unit/offset.js | 13 |
2 files changed, 17 insertions, 3 deletions
diff --git a/src/offset.js b/src/offset.js index 8e355123c..1d7ce300e 100644 --- a/src/offset.js +++ b/src/offset.js @@ -137,8 +137,11 @@ jQuery.fn.extend({ } // Add offsetParent borders - parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); - parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); + // Subtract offsetParent scroll positions + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ) - + offsetParent.scrollTop(); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ) - + offsetParent.scrollLeft(); } // Subtract parent offsets and element margins diff --git a/test/unit/offset.js b/test/unit/offset.js index 3977e3933..b6ec93de6 100644 --- a/test/unit/offset.js +++ b/test/unit/offset.js @@ -412,7 +412,7 @@ testIframe("offset/table", "table", function( $ ) { }); testIframe("offset/scroll", "scroll", function( $, win ) { - expect(24); + expect(28); // If we're going to bastardize the tests, let's just DO it var ie = /msie 8/i.test( navigator.userAgent ); @@ -473,6 +473,17 @@ testIframe("offset/scroll", "scroll", function( $, win ) { notEqual( $().scrollLeft(null), null, "jQuery().scrollLeft(null) testing setter on empty jquery object" ); strictEqual( $().scrollTop(), null, "jQuery().scrollTop(100) testing setter on empty jquery object" ); strictEqual( $().scrollLeft(), null, "jQuery().scrollLeft(100) testing setter on empty jquery object" ); + + // Tests position after parent scrolling (#15239) + $("#scroll-1").scrollTop(0); + $("#scroll-1").scrollLeft(0); + equal( $("#scroll-1-1").position().top, 6, "jQuery('#scroll-1-1').position().top unaffected by parent scrolling" ); + equal( $("#scroll-1-1").position().left, 6, "jQuery('#scroll-1-1').position().left unaffected by parent scrolling" ); + + $("#scroll-1").scrollTop(5); + $("#scroll-1").scrollLeft(5); + equal( $("#scroll-1-1").position().top, 6, "jQuery('#scroll-1-1').position().top unaffected by parent scrolling" ); + equal( $("#scroll-1-1").position().left, 6, "jQuery('#scroll-1-1').position().left unaffected by parent scrolling" ); }); testIframe("offset/body", "body", function( $ ) { |