Javascript - события onload, onclick

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

Это отлично работает в 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;

    }
}

Ответов (5)

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

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

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

Я рекомендую yuu попробовать метод addEvent, найденный здесь:

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

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

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

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

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

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

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