2009-02-27 4 views
2

У меня есть метод, который создается при загрузке страницы. Метод запускает два события: window.onload и image.onclick. Проблема только в одном из событий работает в любой момент времени (то есть: если я комментирую image.onclick метод, window.onload метод работает). Как заставить меня работать?Javascript - onload, onclick events

Это отлично работает в Firefox (Mozilla), но не в IE

пример

test.method = function() 
{ 
    window.onload = this.doSomeWork; 

    for (i = 0; i < images.length; i++) { 
     var image = images[i]; 
     image.onclick = this.imageClickEvent; 

    } 
} 
+0

«Это прекрасно работает в Firefox (Mozilla), но не в IE» - мне жаль, что у меня не было никеля на каждый раз, когда кто-то сказал, что ...: D – BoltBait

ответ

0

Посмотрите на код на странице с Firefox 3. Затем откройте Ошибка Firefox консоли (Ctrl Shift J), чтобы увидеть, какая строка разбивается. Затем обновите свой вопрос с помощью новой информации.

1

Проблема в том, что у вас может быть только одно событие onload.

Я рекомендую Yuu должны попробовать метод addEvent здесь:

http://ejohn.org/projects/flexible-javascript-events/

+0

Существует только одно событие onload. Другой - событие onclick. Вы хотите сказать, что может быть либо onload, либо событие onclick? –

+0

Если test.method() выполняется onload, в onload добавляется два метода/функций, добавляется только последнее. – tan

1

Там не совсем достаточно информации в этом вопросе, чтобы выяснить, что происходит не так, но все посмотреть, включают:

  • - это код в doSomeWork() или imageClickEvent(), ожидающий получить «это», указывающее на что-либо в частности? Потому что это не так, когда вы очищаете метод от объекта своего владельца, чтобы назначить обработчик события.

  • есть ли другой способ записи в window.onload или image.onclick, чтобы вы могли переопределить?

0

Возможно, вы должны добавить слушателя событий здесь, а не пытаться захватить window.onload?

0

после того, как вы запускаете test.method при загрузке страницы, вы перезаписываете окно window.onload с новым значением: this.dosomework, поэтому в пределах временного интервала загрузки тела вы вызываете первую функцию, а затем переписываете, то вторая функция берет на себя и выполняет ... пытались ли вы нажимать оператор window.onload в нижней части test.method? я думаю, что если функциональный блок слишком длинный, второй window.onload никогда не будет выполнен, потому что окно уже закончило загрузку, его миллисекунды, но это все, что требуется

, по-видимому, в firefox функция выполняется прежде чем он будет перезаписан или, возможно, добавлен в текущую нагрузку, не уверен в технических особенностях. снова попробуйте нажать на загрузку снизу и посмотреть, что произойдет

Вы не должны называть функцию onload в любой другой функции, которая вызывается после загрузки тела, потому что независимо от того, насколько вы осторожны, вы не можете зависеть от того, что временной интервал загрузки достаточно длинный, чтобы содержать оба события, вы должны добавить в window.onload до того, как тег body будет вызван (или закончен), чтобы убедиться, что событие поймано.

Смежные вопросы