Присвоение 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, время: 10:52. |