Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Присвоение event.pageX в IE (https://javascript.ru/forum/misc/28201-prisvoenie-event-pagex-v-ie.html)

DesiresDesigner 10.05.2012 23:47

Присвоение 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.
Я в замешательстве. С чем это может быть связано?

Octane 11.05.2012 08:40

Покажите, как вы используете эту функцию

Solovei95 11.05.2012 09:24

Я сам когда-то пробовал сменить у обьекта Event какой-нибудь атрибут. А вот хрен! Этот объект нельзя редактировать!
Выход остается только один: создавать новый объект и сделать ссылку на evt.
:) :) :)
Я бы даже сказал ЛУЧШИЙ вариант! А если ты начинающий JS программист то ты мою философию вряд ли поймешь...

Solovei95 11.05.2012 09:27

Перевожу с китайского:
var fakeEvt = {
  original: evt,
  pageX: /* вбей X */,
  pageY: /* вбей Y */,
}

Solovei95 11.05.2012 09:30

А вообще, в функции fixEvent нужно указать аргумент e.
Но современные браузеры не позволят физически это сделать!

DesiresDesigner 11.05.2012 11:40

Цитата:

Сообщение от Octane (Сообщение 173729)
Покажите, как вы используете эту функцию

очень просто: event = fixEvent(event)

DesiresDesigner 11.05.2012 11:42

Цитата:

Сообщение от Solovei95 (Сообщение 173732)
Выход остается только один: создавать новый объект и сделать ссылку на evt.\

Да, я только начала изучать js, да и то потому что реализовать штуку, над которой работаю, без него будет сложно, если возможно.
Спасибо за идею, попробую воспользоваться :)

Octane 11.05.2012 12:02

хм да вроде должно работать
<!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 будет ошибка, но ничто не мешает добавить новое свойство.


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