Присвоение 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. Я в замешательстве. С чем это может быть связано? |
Покажите, как вы используете эту функцию
|
Я сам когда-то пробовал сменить у обьекта Event какой-нибудь атрибут. А вот хрен! Этот объект нельзя редактировать!
Выход остается только один: создавать новый объект и сделать ссылку на evt. :) :) :) Я бы даже сказал ЛУЧШИЙ вариант! А если ты начинающий JS программист то ты мою философию вряд ли поймешь... |
Перевожу с китайского:
var fakeEvt = { original: evt, pageX: /* вбей X */, pageY: /* вбей Y */, } |
А вообще, в функции fixEvent нужно указать аргумент e.
Но современные браузеры не позволят физически это сделать! |
Цитата:
|
Цитата:
Спасибо за идею, попробую воспользоваться :) |
хм да вроде должно работать
<!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. |