datalist: use draft getClientRects, works (better) on ff, ie, webkit - jscancer - Javascript crap (relatively small)
(HTM) git clone git://git.codemadness.org/jscancer
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 887ccc8411a5bb8673657133b894b689aab82a81
(DIR) parent 4b633a3a0d2361d17515a108f97b04ca829ec732
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Thu, 1 Jun 2017 19:54:40 +0200
datalist: use draft getClientRects, works (better) on ff, ie, webkit
Diffstat:
M datalist/datalist.js | 16 ++++------------
1 file changed, 4 insertions(+), 12 deletions(-)
---
(DIR) diff --git a/datalist/datalist.js b/datalist/datalist.js
@@ -59,20 +59,12 @@ function datalist_init(input) {
};
var datalist_render = function(m) {
var dd = dropdown.cloneNode(false);
- var left = 0, top = 0;
- for (var c = input; c; c = c.offsetParent) {
- left += c.offsetLeft;
- top += c.offsetTop;
- if (c.style.position == "fixed") {
- left += window.pageXOffset;
- top += window.pageYOffset;
- break;
- }
+ var r = input.getClientRects() || [];
+ if (r.length) {
+ dd.style.left = String(r[0].left + window.pageXOffset) + "px";
+ dd.style.top = String(r[0].top + input.offsetHeight + window.pageYOffset) + "px";
}
- dd.style.left = String(left) + "px";
- dd.style.top = String(top + input.offsetHeight) + "px";
dd.style.minWidth = String(input.clientWidth) + "px";
-
for (var i = 0; i < m.length; i++)
dd.appendChild(m[i].el);
dropdown.parentNode.replaceChild(dd, dropdown)