Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   присвоение события (https://javascript.ru/forum/events/17872-prisvoenie-sobytiya.html)

evgh 06.06.2011 19:39

присвоение события
 
надо динамически присвоить событию onmouseover неких элементов функцию gg(event, this);
подскажите как это правильно делается.

Sweet 06.06.2011 19:49

element.onmouseover = function(event){
  gg(event || window.event, this);
};

Маэстро 06.06.2011 19:55

Sweet, а я вот давно хотел у кого-нибудь спросить, валидна ли вот такая конструкция?
function gg()
{
// обработчик события от мыши на объекте
// this ... event... blablabla
};

element.onmouseover = gg;

evgh 06.06.2011 20:04

Sweet, спасибо

Sweet 06.06.2011 21:46

Маэстро, конечно.

trikadin 07.06.2011 00:15

Валидный js... А имеет вообще смысл? Учитывая, что есть ie, в котором даже обработчики добавляются по-другому (я о attachEvent, господа), не говоря уже о выделениях, к примеру.

Или мы берём валидность отдельных участков кода?

Маэстро 09.06.2011 12:53

Цитата:

Сообщение от Sweet (Сообщение 107557)
Маэстро, конечно.

тогда зачем усложнять жизнь и передавать параметры функции
gg(event, this); ?

evgh 09.06.2011 22:35

Маэстро, а как правильно тогда?

dmitriymar 09.06.2011 22:52

Маэстро,
в 9 ие реализован addEventListener. так что можно говорить о начале перехода на один стандарт.так что возможно для более ранних версий появятся заплатки для этого дела

Маэстро 10.06.2011 12:31

Цитата:

Сообщение от evgh (Сообщение 108008)
Маэстро, а как правильно тогда?

я не сказал, что Ваш вариант неправильный. но зачем же передавать параметр в функцию this, если при вызове функции он и так доступен внутри функции? А вот с передачей параметра event в разных броузерах могут быть проблемы. причем это в зависимости от того, что Вы дальше с этим эвентом планируете делать. вообще для кроссбраузерности рекомендуется использовать вот такую функцию получения эвента:
function fixEvent(e)
{
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);
 }

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

return e;
};


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