Fixes error when getting offset of element not in document
This fixes an error which is called out in jQuery Migrate but probably never happens in real life. This is because we call `jQuery.fn.offset` without checking if the element is in the document. Based on testing done here and within the MediaWiki team, I'm pretty sure jQuery never actually implemented explicit checks and this jQuery Migrate warning is just to cover the case where a browser might start returning inconsistnet results. And we could at least reproduce the inconsistency, so that's something. We now default the offset to 0/0 if the parent element happens to not be in the document. This appears to be what jQuery used to do in the past, and generally appears to be what people expect in these cases. This fixes #5584.
This commit is contained in:
parent
233424da2b
commit
2c5467b38c
9
src/js/select2/dropdown/attachBody.js
vendored
9
src/js/select2/dropdown/attachBody.js
vendored
@ -190,7 +190,14 @@ define([
|
|||||||
$offsetParent = $offsetParent.offsetParent();
|
$offsetParent = $offsetParent.offsetParent();
|
||||||
}
|
}
|
||||||
|
|
||||||
var parentOffset = $offsetParent.offset();
|
var parentOffset = {
|
||||||
|
top: 0,
|
||||||
|
left: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($.contains(document.body, $offsetParent[0])) {
|
||||||
|
parentOffset = $offsetParent.offset();
|
||||||
|
}
|
||||||
|
|
||||||
css.top -= parentOffset.top;
|
css.top -= parentOffset.top;
|
||||||
css.left -= parentOffset.left;
|
css.left -= parentOffset.left;
|
||||||
|
Loading…
Reference in New Issue
Block a user