Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Обработчик через свойство (вопрос) (https://javascript.ru/forum/events/25294-obrabotchik-cherez-svojjstvo-vopros.html)

alexandr_v-vich 01.02.2012 02:24

Обработчик через свойство (вопрос)
 
Есть функция:
var i=0;
function light() {
		if (i<4) {
			document.getElementsByTagName('a')[1].className += " redtext" + i;
			i += 1;
			t = setTimeout("light()", 50);
		}

Прибавляет классы стиля по порядку после "onmouseover". Работает на ура.

Решил вынести обработчик из html в js, как понял через свойство. Но элемент будет искаться и функция будет запускаться только после "window.onload" (или, если js после html - что не вариант).

Дошёл до этого:
var i=0;
if (window.onload) {
	document.getElementsByTagName('a')[1].onmouseover = function light() {
		if (i<4) {
			document.getElementsByTagName('a')[1].className += " redtext" + i;
			i += 1;
			t = setTimeout("light()", 50);
		}
	}
}

- не арбайтен...
Неужели опять что-то проглядел?

melky 01.02.2012 02:28

как минимум, неправильно используете обработчик события загрузки страницы :
window.onload = function(){
     var i = 0,
          light = function() {
               if (i<4) {
                    document.getElementsByTagName('a')[1].className += " redtext" + i;
                    i += 1;
                    t = setTimeout(light, 50);
               }
          };
     document.getElementsByTagName('a')[1].onmouseover = light;
}

alexandr_v-vich 01.02.2012 02:33

light is not defined....

но вопрос ещё один, смогу ли я в таком виде поставить на этот элемент ещё один обработчик?

alexandr_v-vich 01.02.2012 02:38

Отлично, работает)

Только я поставил
document.getElementsByTagName('a')[1].addEventListener( "mouseover", light, false);

вместо
document.getElementsByTagName('a')[1].onmouseover = light;

Так правильнее?

melky 01.02.2012 02:42

Цитата:

Сообщение от alexandr_v-vich (Сообщение 154428)
light is not defined....

вот пример.

Цитата:

Сообщение от alexandr_v-vich (Сообщение 154428)
но вопрос ещё один, смогу ли я в таком виде поставить на этот элемент ещё один обработчик?

нет, для этого вам необходимо использовать другой способ назначения обработчика, так как значением свойства on%событие% может быть только одна функция, а не две и т.д (в данный момент времени) :

window.onload = function(){
     var i = 0,
          ie = '\v'=='v',
          el = document.getElementsByTagName('a')[1],
          light = function() {
               if (i<4) {
                    document.getElementsByTagName('a')[1].className += " redtext" + i;
                    i += 1;
                    t = setTimeout(light, 50);
               }
          };
     ie ? el.attachEvent('onmouseover', light):el.addEventListener('mouseover', light, false);
}

alexandr_v-vich 01.02.2012 02:57

Спасибо, melky
Всё заработало.
Правда, код не до конца понятен, но тем лучше, получше поразбираюсь в регулярных выражениях.

melky 01.02.2012 02:58

их там нет, там сплошной DOM.

рони 01.02.2012 03:03

melky,
На всякий случай Особенности attachEvent
Цитата:

Обработчик ставится как:

element.attachEvent( "on"+имя_события, обработчик)

melky 01.02.2012 12:15

Цитата:

Сообщение от рони (Сообщение 154443)
melky,
На всякий случай Особенности attachEvent

да...

три часа ночи :)


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