@russeljo

Как исправить скрипт, чтобы заработало в Firefox?

FF ругается:
TypeError: e is undefined


Не могу понять в чем дело, в хроме всё работает.

function move(e,b,r)    //для получения координат мышки
    {
        e = e || window.event
        if ( e.pageX == null 
             && e.clientX != null 
         ) 
            {
                var html = document.documentElement
                var body = document.body
                e.pageX = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0)
                e.pageY = e.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0)
            }
        //устанавливаем тултип на уровне мышки
        jQuery('.tool').css('left',e.pageX + 15 + r + 'px');
        jQuery('.tool').css('top',e.pageY + 15 - b + 'px');
    }


Это взято отсюда Ссылка
Там так же не работает в FF.

Подскажите как заполучить это e ?
  • Вопрос задан
  • 245 просмотров
Решения вопроса 1
@russeljo Автор вопроса
Всё оказалось просто, нужно было передать event через jQuery.
В результате вот что получил:
jQuery(document).ready(function(){
    
    jQuery('map area').mouseover(function(e){
        data = maparray[jQuery(this).index()];        
        jQuery('<div class="tool"></div>').appendTo('body').html(data);
        //console.log(e.clientX, e.clientY, e.pageX, e.pageY);        
        jQuery('.tool').css('left',e.pageX + 15  + 'px');
        jQuery('.tool').css('top',e.pageY + 15  + 'px');
    });

});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@MrTimon
Вы должны event передавать первым параметром в ф-цию move (а Вы как мне кажется передаете туда 0). В хроме работает так как e заменяется на window.event, тогда как в FF такого значение нету (Пример который вы предоставили в ссылке тоже выдает ошибку TypeError: e is undefined при наведении).

Посмотрел код примера. Предлагаю так ф-цию over тоже добавить параметр e и потом его передавать в ф-цию move. как-то так:
function over(e,tip)	//функция при наведении
	{  
		//обрабатываем массив с данными
		data_color = '';
		data = maparray[tip-1];
		data = data.split(';');
		name = 	data[0]
		square = data[1]
		desc = data[2]
		//добавляем тултип
		$('').appendTo('body').html(name+' '+square+'кв.м.'+desc);
		move(e,0,0);
	}


потом удалить все инлайн вызовы ф-ции over и дописать следующий код в документ реди:

$(document).ready(function(){
		$('area').mouseover(function(e) {
                      over(e,$(this).index()+1);
                });
	});


не проверял но должно работать нормально.
Ответ написан
jshint.com вставляете ваш код сюда и смотрите на ошибки в коде, банально пропускаете ";"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы