Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Не работает GetPosition (https://javascript.ru/forum/dom-window/48765-ne-rabotaet-getposition.html)

valmonv 16.07.2014 10:27

Не работает GetPosition
 
Приветствую!

Не пойму в чем дело, есть:
function GetPosition($Object){
  var $x = $y = 0;
  while($Object){
    Debug($Object.tagName);
    $x += $Object.offsetLeft;
    if(typeof $Object.scrollLeft != 'undefined')
      $x -= $Object.scrollLeft;
    $y += $Object.offsetTop;
    if(typeof $Object.scrollTop != 'undefined')
      $y -= $Object.scrollTop;
    $Object = $Object.offsetParent;
  }
  return {clientX:$x,clientY:$y};
}

Есть обвязка по событию:
onclick="
                    with(document.getElementById('id').style) {
                        if(display != 'none')
                        {
                        display = 'none';
                        } else {
                            var Position = GetPosition(this);
                            left = Position.clientX;
                            top = Position.clientY + 10;
                            display='block';
                            }
                            }"

Не могу понять, почему в style не обрабатывается left/top.
Если для проверки обрезать GetPosition до:
function GetPosition($Object){
  return {clientX:10px,clientY:10px};
}

и убрать + 10 из:
Код:

top = Position.clientY + 10;
То событие GetPosition отрабатывает.
Складывается впечатление что гдето обрезается единицы исчисления, в моем случае это px

skrudjmakdak 16.07.2014 11:55

да у вас тут черт ногу сломит))
более менее привел в рабочий вариант:

<html>
	<head>
		<title>example</title>
	</head>
	<body>
		<div style="position: relative; top: 34px;">
			<input type='button' value='click me' id="mybutton">
		</div>
		<!--<script src="http://code.jquery.com/jquery-1.10.2.js"></script>-->
		<!--<script src="http://code.jquery.com/ui/1.11.0/jquery-ui.js"></script>
		<link rel="stylesheet" href="http://code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css">-->
		<script>
		document.getElementById('mybutton').onclick = function ()
			{
			var $x = $y = 0;
			
			var $Object = this;
			
			while($Object)
				{
				//Debug($Object.tagName);
				$x += $Object.offsetLeft;
				if(typeof $Object.scrollLeft != 'undefined')
				$x -= $Object.scrollLeft;
				$y += $Object.offsetTop;
				if(typeof $Object.scrollTop != 'undefined')
				$y -= $Object.scrollTop;
				$Object = $Object.offsetParent;
				}
				
			console.log($x);
			console.log($y);
  //return {clientX:$x,clientY:$y};

			}
		</script>
	</body>
</html>



и еще.. говорят не рекомендуют вроде как использовать with
http://habrahabr.ru/post/120364/

valmonv 16.07.2014 12:22

Спасибо за ответ, либы рабочей системы, так что без перепиливания пока. да и фреймворк, пока излишен.
А так, оказалось не пропускал валидатор в браузере
Был указан DOCTYPE html, и в результате все что явно не указанно в px, вероятно обрубало, там где жестко прописано, помечал алертами

valmonv 16.07.2014 12:28

Ой, сорри, фреймворка же нет)


Часовой пояс GMT +3, время: 21:25.