Скрипт не работает в FireFox(Определение координат

 
0
 
JavaScript
ava
lollollollol | 04.10.2013, 00:13
Здравствуйте. есть скрипт, который определяет координаты клика на изображении.

Прекрасно работает в Опере, но не работает в FireFox, подскажите пожалуйста в чём проблема


 <script language="javascript">

function mousePageXY(elem)
{
  var x = 0, y = 0;

  y_offset = elem.offsetTop;
  x_offset = elem.offsetLeft;

  if (window.event.pageX || window.event.pageY)
  {
    x = window.event.pageX;
    y = window.event.pageY;
  }
  else if (window.event.clientX || window.event.clientY)
  {
    x = window.event.clientX +
      (document.documentElement.scrollLeft || document.body.scrollLeft) -
      document.documentElement.clientLeft;
    y = window.event.clientY +
      (document.documentElement.scrollTop || document.body.scrollTop) -
      document.documentElement.clientTop;
  }

var clickS = "x=" + (x - x_offset) + '&y=' + (y - y_offset); 
return clickS;
}

</script> 


Вызывается так: onClick="alert(mousePageXY(this))"


В чём проблема, почему в лисе не хочет работать?
Comments (11)
ava
lollollollol | 03.10.2013, 23:31 #
TypeError: window.event is undefined

Вот такая ошибка видна когда нажимаю Исследовать элемент
ava
kin | 04.10.2013, 08:20 #
Цитата (lollollollol @  3.10.2013,  23:13 findReferencedText)
В чём проблема, почему в лисе не хочет работать?
 Привет! Ну наверное в том, что в FireFox  window.event is undefined
ava
lollollollol | 04.10.2013, 09:22 #
Это я уже понял, я 2 часа ползал по гуглу, так и не смог побороть проблему.



Скрипт писал не сам, взял с инета.
Есть готовый проект,  осталось побороть этот скрипт. с JS раньше не работал, да и в будущем нет нужды.
Подскажите плз как исправить проблему?
ava
lollollollol | 04.10.2013, 10:44 #
Ап, как сделать чтобы в лисе заработало?
ava
kin | 04.10.2013, 11:00 #
Цитата (lollollollol @  4.10.2013,  09:22 findReferencedText)
Подскажите плз как исправить проблему?

Цитата (lollollollol @  4.10.2013,  09:22 findReferencedText)
Вызывается так: onClick="alert(mousePageXY(this))"

Код onClick="alert(mousePageXY(this))" замени на onClick="alert(mousePageXY(e,this))" где е есть объект-событие, соответственно в обработчике нужен еще один параметер...
Подробности посмотри здесь, там очень хорошо про это написано...
ava
lollollollol | 04.10.2013, 11:56 #
Не могу сообразить что от меня требуется


onClick="alert(mousePageXY(e,this))"


Это сделал, function mousePageXY(elem) нужно менять?


Цитата


Кроссбраузерное решение



Универсальное решение для получения объекта события:

element.onclick = function(event) {
   event = event || window.event; // (*)
  
   // Теперь event - объект события во всех браузерах.

};




Не понимаю, объясните пожалуйста так, чтоб дошло
ava
kin | 04.10.2013, 12:46 #
Много извиняюсь, лопухнулся в торопях!

onClick="alert(mousePageXY(e,this))"
 нужно заменить вот на это

onClick="alert(mousePageXY(event,this))"
 в данном случае,именно event, а не как иначе

Цитата (lollollollol @  4.10.2013,  11:56 findReferencedText)
Это сделал, function mousePageXY(elem) нужно менять?

в определение функции нужно добавить еще один параметер, который будет принимать объект событие. Как он будет называться это без разницы.

function mousePageXY(e,elem){тело функции}
 где e - объект событие
P.S. Проверил, работает в IE-10, FF-24

ava
lollollollol | 04.10.2013, 13:10 #
Не пойму почему у меня не работает, ошибка
TypeError: window.event

Вот мой код:


 <script language="javascript">
function mousePageXY(e,elem)
{
  var x = 0, y = 0;
  y_offset = elem.offsetTop;
  x_offset = elem.offsetLeft;
  if (window.event.pageX || window.event.pageY)
  {
    x = window.event.pageX;
    y = window.event.pageY;
  }
  else if (window.event.clientX || window.event.clientY)
  {
    x = window.event.clientX +
      (document.documentElement.scrollLeft || document.body.scrollLeft) -
      document.documentElement.clientLeft;
    y = window.event.clientY +
      (document.documentElement.scrollTop || document.body.scrollTop) -
      document.documentElement.clientTop;
  }
var clickS = "x=" + (x - x_offset) + '&y=' + (y - y_offset); 
return clickS;
}
</script> 


вызываю точно так как вы показали.

пытался делать так:



 <script language="javascript">
function mousePageXY(e,elem)
{
e = event || window.event; 
  var x = 0, y = 0;
  y_offset = elem.offsetTop;
  x_offset = elem.offsetLeft;
  if (e.pageX || e.pageY)
  {
    x = e.pageX;
    y = e.pageY;
  }
  else if (e.clientX || e.clientY)
  {
    x = e.clientX +
      (document.documentElement.scrollLeft || document.body.scrollLeft) -
      document.documentElement.clientLeft;
    y = e.clientY +
      (document.documentElement.scrollTop || document.body.scrollTop) -
      document.documentElement.clientTop;
  }
var clickS = "x=" + (x - x_offset) + '&y=' + (y - y_offset); 
return clickS;
}
</script> 


И соответственно вызов mousePageXY(event,this)

Оба ваианта в опере работают, но в лисе по прежнему не хотят

Ошибка во втором варианте:
ReferenceError: event is not defined
ava
kin | 04.10.2013, 14:01 #
Вот это строка 
e = event || window.event;
 не нужна, e - это уже готовый объект-событие, с ним нужно просто работать.
ava
CruorVult | 04.10.2013, 14:24 #
Не

e = event || window.event; 


а


e = e || window.event; 


Нужно думать хоть немножко а не копипастить
ava
lollollollol | 04.10.2013, 14:37 #

    
e = e || window.event; 


Вооо, спасибо!!!!! 
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit