From 0a5d7ba0bdc23d9dc61feca55b04ce2acf31dcd1 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Mon, 27 Aug 2007 19:33:43 +0000 Subject: [PATCH] add try/catch hack for IE so that it doesn't choke on offsetParent check. (Closes 798.) git-svn-id: http://svn.openlayers.org/trunk/openlayers@4061 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Util.js | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/lib/OpenLayers/Util.js b/lib/OpenLayers/Util.js index 3a375c645c..179de144ba 100644 --- a/lib/OpenLayers/Util.js +++ b/lib/OpenLayers/Util.js @@ -986,22 +986,38 @@ OpenLayers.Util.pagePosition = function(forElement) { var valueT = 0, valueL = 0; var element = forElement; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; + var child = forElement; + while(element) { - // Safari fix - if (element.offsetParent==document.body) - if (OpenLayers.Element.getStyle(element,'position')=='absolute') break; + if(element == document.body) { + if(OpenLayers.Element.getStyle(child, 'position') == 'absolute') { + break; + } + } + + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; - } while (element = element.offsetParent); + child = element; + try { + // wrapping this in a try/catch because IE chokes on the offsetParent + element = element.offsetParent; + } catch(e) { + OpenLayers.Console.error( + "OpenLayers.Util.pagePosition failed: element with id " + + element.id + " may be misplaced." + ); + break; + } + } element = forElement; - do { - valueT -= element.scrollTop || 0; - valueL -= element.scrollLeft || 0; - } while (element = element.parentNode); - + while(element) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + element = element.parentNode; + } + return [valueL, valueT]; };