Jump to content
  • 0

onload


DjTarik
 Share

Question

20 answers to this question

Recommended Posts

  • 0
Объединить их я не имею права.

Почему?

Как быть в такой ситуации?

Если не объединять, то никак. Второй обработчик всегда будет затирать первый. Надо навешивать событие при помощи addEvenListener/attachEvent. Но это будет объединение...

Link to comment
Share on other sites

  • 0

DjTarik

Лови дружище

	if(window.addEventListener){
window.addEventListener('load', handler1, false)
window.addEventListener('load', handler2, false)
}else {
window.detachEvent( "onload", handler1)
window.detachEvent( "onload", handler2)
}
function handler1(){ alert(1);}
function handler2(){ alert(2);}

Link to comment
Share on other sites

  • 0
Почему?

Если не объединять, то никак. Второй обработчик всегда будет затирать первый. Надо навешивать событие при помощи addEvenListener/attachEvent. Но это будет объединение...

Я имел ввиду, что не могу сделать из этого:

onload = function(){
alert('1');
}

onload = function(){
alert('2');
}

вот это (т.к. это писалось в head разных страниц):

onload = function(){
alert('1');
alert('2');
}

Про "addEventListener" спасибо, попробую. Я так понял, что это единственный выход?

DjTarik

Лови дружище

	if(window.addEventListener){
window.addEventListener('load', handler1, false)
window.addEventListener('load', handler2, false)
}else {
window.detachEvent( "onload", handler1)
window.detachEvent( "onload", handler2)
}
function handler1(){ alert(1);}
function handler2(){ alert(2);}

=)

Вопрос был теоретический) Но всё равно спасибо.

Edited by DjTarik
Link to comment
Share on other sites

  • 0
это единственный выход?

Единственный нормальный. Ради спасения многих жизней при жестоком цейтноте можно сделать что-то наподобие

onload = function(){
...
}

...

var oldOnload = windows.onload;

...

onload = function(){
...
oldOnload();
}

Но практической необходимости в этом сейчас нет, браузеров, понимающих только такое архаичное навешивание обработчиков, давно не осталось, а понимаемость кода от таких вывертов сильно страдает...

Link to comment
Share on other sites

  • 0
Разве что совместимостью с IE4 и т.п. даже не динозаврами уже, а трилобитами какими-то :). В остальном хорошего в нем мало.

Ааа, ясненько, спасиб за разъяснение :)

Link to comment
Share on other sites

  • 0
function initScript(){
// тут мы запускаем ф-ции, последовтельность запуска ф-ций легко поменять
function1();
function2();
function3();
}

// тут мы записываем наши ф-ции
function function1(){ ... }
function function2(){ ... }
function function3(){ ... }

// тут мы добавляем в очередь событий (которые начнуться на window.onload) ф-цию initScript
if (window.addEventListener) window.addEventListener("load", initScript, false);
else if (window.attachEvent && !window.opera) window.attachEvent("onload", initScript);

// в любой момент мы еще можем добавить в очередь событий ф-цию.... как назовете так и будет
if (window.addEventListener) window.addEventListener("load", newFunction, false);
else if (window.attachEvent && !window.opera) window.attachEvent("onload", newFunction);

function newFunction(){
alert( 7 )
}

Link to comment
Share on other sites

  • 0
Дружище, а объясни плиз, чем этот способ хорош?

Тем, что в IE функции будут запускаться в том порядке, в котором они описаны в коде, а не в обратном, как это будет с attachEvent (FILO там, а не FIFO)

Link to comment
Share on other sites

  • 0
Тем, что в IE функции будут запускаться в том порядке, в котором они описаны в коде, а не в обратном, как это будет с attachEvent (FILO там, а не FIFO)

Ща протестил. В ИЕ выводиться не в обратном порядке, а вообще произвольно. И вот сделал пример, и почему то всё равно выводиться произвольно. Почему?

onload = function(){
document.attachEvent('onclick', function(e){alert(1);});
document.attachEvent('onclick', function(e){alert(2);});
document.attachEvent('onclick', function(e){alert(3);});
document.attachEvent('onclick', function(e){alert(4);});
document.attachEvent('onclick', function(e){alert(5);});
}



var oldOnload = window.onload;


onload = function(){

oldOnload();
}

Link to comment
Share on other sites

  • 0
Ща протестил. В ИЕ выводиться не в обратном порядке, а вообще произвольно. И вот сделал пример, и почему то всё равно выводиться произвольно. Почему?

Microsoft такой Microsoft....

Link to comment
Share on other sites

  • 0
Microsoft такой Microsoft....

Хреново конечно, хреново...

Вот тут предлагается решения этой проблемы, да и многих других. Скрипт - который решает много траблов. Что думаешь по поводу него, игра стоит свеч?

http://javascript.ru/tutorial/events/crossbrowser

Link to comment
Share on other sites

  • 0
Хреново конечно, хреново...

Вот тут предлагается решения этой проблемы, да и многих других. Скрипт - который решает много траблов. Что думаешь по поводу него, игра стоит свеч?

http://javascript.ru/tutorial/events/crossbrowser

Если понимаешь, как все работает, то можно использовать

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy