Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.05.2012, 23:47
Новичок на форуме
Отправить личное сообщение для DesiresDesigner Посмотреть профиль Найти все сообщения от DesiresDesigner
 
Регистрация: 09.05.2012
Сообщений: 6

Присвоение event.pageX в IE
Пытаюсь "реабилитировать" свой код под IE. Там, как мне известно, у event не существует свойства pageX. Сначала пробовала исправить все через функцию fixEvent, которую нашла в одном из уроков:
function fixEvent(e) {
                                e = e || window.event;

                                if (!e.target) e.target = e.srcElement;

                                if (e.pageX == null && e.clientX != null ) { // если нет pageX..
                                    var html = document.documentElement;
                                    var body = document.body;

                                    e.pageX = e.clientX + (html.scrollLeft || body && body.scrollLeft || 0);
                                    e.pageX -= html.clientLeft || 0;

                                    e.pageY = e.clientY + (html.scrollTop || body && body.scrollTop || 0);
                                    e.pageY -= html.clientTop || 0;
                                }

                                if (!e.which && e.button) {
                                    e.which = e.button & 1 ? 1 : ( e.button & 2 ? 3 : ( e.button & 4 ? 2 : 0 ) )
                                }


Не заработало. Пытаясь понять суть проблемы, просто написала event.pageX = 20. Не заработало. Через alert выводит undefined.
Я в замешательстве. С чем это может быть связано?
Ответить с цитированием
  #2 (permalink)  
Старый 11.05.2012, 08:40
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Покажите, как вы используете эту функцию
Ответить с цитированием
  #3 (permalink)  
Старый 11.05.2012, 09:24
Профессор
Посмотреть профиль Найти все сообщения от Solovei95
 
Регистрация: 15.03.2011
Сообщений: 353

Я сам когда-то пробовал сменить у обьекта Event какой-нибудь атрибут. А вот хрен! Этот объект нельзя редактировать!
Выход остается только один: создавать новый объект и сделать ссылку на evt.

Я бы даже сказал ЛУЧШИЙ вариант! А если ты начинающий JS программист то ты мою философию вряд ли поймешь...
Ответить с цитированием
  #4 (permalink)  
Старый 11.05.2012, 09:27
Профессор
Посмотреть профиль Найти все сообщения от Solovei95
 
Регистрация: 15.03.2011
Сообщений: 353

Перевожу с китайского:
var fakeEvt = {
  original: evt,
  pageX: /* вбей X */,
  pageY: /* вбей Y */,
}
Ответить с цитированием
  #5 (permalink)  
Старый 11.05.2012, 09:30
Профессор
Посмотреть профиль Найти все сообщения от Solovei95
 
Регистрация: 15.03.2011
Сообщений: 353

А вообще, в функции fixEvent нужно указать аргумент e.
Но современные браузеры не позволят физически это сделать!
Ответить с цитированием
  #6 (permalink)  
Старый 11.05.2012, 11:40
Новичок на форуме
Отправить личное сообщение для DesiresDesigner Посмотреть профиль Найти все сообщения от DesiresDesigner
 
Регистрация: 09.05.2012
Сообщений: 6

Сообщение от Octane Посмотреть сообщение
Покажите, как вы используете эту функцию
очень просто: event = fixEvent(event)
Ответить с цитированием
  #7 (permalink)  
Старый 11.05.2012, 11:42
Новичок на форуме
Отправить личное сообщение для DesiresDesigner Посмотреть профиль Найти все сообщения от DesiresDesigner
 
Регистрация: 09.05.2012
Сообщений: 6

Сообщение от Solovei95 Посмотреть сообщение
Выход остается только один: создавать новый объект и сделать ссылку на evt.\
Да, я только начала изучать js, да и то потому что реализовать штуку, над которой работаю, без него будет сложно, если возможно.
Спасибо за идею, попробую воспользоваться
Ответить с цитированием
  #8 (permalink)  
Старый 11.05.2012, 12:02
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

хм да вроде должно работать
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>…</title>
</head>
<body>
	<script>
		function fixEvent(e) {

			e = e || window.event;

			if (!e.target) {
				e.target = e.srcElement;
			}

			if (e.pageX == null && e.clientX != null ) {
				var html = document.documentElement;
				var body = document.body;

				e.pageX = e.clientX + (html.scrollLeft || body && body.scrollLeft || 0);
				e.pageX -= html.clientLeft || 0;

				e.pageY = e.clientY + (html.scrollTop || body && body.scrollTop || 0);
				e.pageY -= html.clientTop || 0;
			}

			if (!e.which && e.button) {
				e.which = e.button & 1 ? 1 : (e.button & 2 ? 3 : (e.button & 4 ? 2 : 0));
			}

			return e;
		}

		document.onclick = function (event) {
			event = fixEvent(event);
			alert([event.pageX, event.pageY]);
		};
	</script>
</body>
</html>

Проверил в IE7 и IE8

Solovei95, не весь объект нельзя редактировать, а лишь стандартные свойства, например при попытке изменить event.type будет ошибка, но ничто не мешает добавить новое свойство.

Последний раз редактировалось Octane, 11.05.2012 в 12:11.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоение значения атрибутам тега <SCRIPT> bezna Internet Explorer 3 25.10.2010 16:30
Неправильное присвоение элементам событий maxagg Events/DOM/Window 2 19.09.2010 12:58
Присвоение класса элементу с заранее неизвестным ID why.not? Events/DOM/Window 3 01.03.2010 04:47
Присвоение высоте дива значения window.innerHeight Capitano Элементы интерфейса 7 26.12.2009 15:54
присвоение document.form.text.value переменной pilot Общие вопросы Javascript 12 24.08.2009 18:09