Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Скрипт не работает в FireFox(Определение координат


Автор: lollollollol 3.10.2013, 23: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))"


В чём проблема, почему в лисе не хочет работать?

Автор: lollollollol 3.10.2013, 23:31
TypeError: window.event is undefined

Вот такая ошибка видна когда нажимаю Исследовать элемент

Автор: kin 4.10.2013, 08:20
Цитата(lollollollol @  3.10.2013,  23:13 Найти цитируемый пост)
В чём проблема, почему в лисе не хочет работать?
 Привет! Ну наверное в том, что в FireFox  window.event is undefined

Автор: lollollollol 4.10.2013, 09:22
Это я уже понял, я 2 часа ползал по гуглу, так и не смог побороть проблему.



Скрипт писал не сам, взял с инета.
Есть готовый проект,  осталось побороть этот скрипт. с JS раньше не работал, да и в будущем нет нужды.
Подскажите плз как исправить проблему?

Автор: lollollollol 4.10.2013, 10:44
Ап, как сделать чтобы в лисе заработало?

Автор: kin 4.10.2013, 11:00
Цитата(lollollollol @  4.10.2013,  09:22 Найти цитируемый пост)
Подскажите плз как исправить проблему?

Цитата(lollollollol @  4.10.2013,  09:22 Найти цитируемый пост)
Вызывается так: onClick="alert(mousePageXY(this))"

Код onClick="alert(mousePageXY(this))" замени на onClick="alert(mousePageXY(e,this))" где е есть объект-событие, соответственно в обработчике нужен еще один параметер...
Подробности посмотри http://learn.javascript.ru/obtaining-event-object, там очень хорошо про это написано...

Автор: lollollollol 4.10.2013, 11:56
Не могу сообразить что от меня требуется

Код

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


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


Цитата

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

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



Не понимаю, объясните пожалуйста так, чтоб дошло

Автор: kin 4.10.2013, 12:46
Много извиняюсь, лопухнулся в торопях!
Код

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

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

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

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

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


Автор: lollollollol 4.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

Автор: kin 4.10.2013, 14:01
Вот это строка 
Код
e = event || window.event;
 не нужна, e - это уже готовый объект-событие, с ним нужно просто работать.

Автор: CruorVult 4.10.2013, 14:24
Не
Код

e = event || window.event; 


а 

Код

e = e || window.event; 


Нужно думать хоть немножко а не копипастить

Автор: lollollollol 4.10.2013, 14:37
Код

    
e = e || window.event; 


Вооо, спасибо!!!!! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)