Javascript - загрузка, события 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;

    }
}

person Community    schedule 27.02.2009    source источник
comment
Это прекрасно работает в Firefox (mozilla), но не в IE — я бы хотел получать пятак каждый раз, когда кто-то это говорит... :D   -  person BoltBait    schedule 27.02.2009


Ответы (5)


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

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

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

person Community    schedule 27.02.2009
comment
Есть только одно событие загрузки. Другое — событие onclick. Вы хотите сказать, что может быть событие onload или onclick? - person DK.; 27.02.2009
comment
если test.method() выполняется при загрузке, для загрузки добавляются два метода/функции, будет добавлена ​​только последняя. - person tan; 28.02.2009

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

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

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

person Community    schedule 27.02.2009

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

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

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

person Community    schedule 03.03.2009

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

person BuddyJoe    schedule 27.02.2009

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

person Community    schedule 03.03.2009