Добавьте несколько window.onload событий

В моем Пользовательском элементе управления ASP.NET я добавляю некоторый JavaScript к window.onload событие:

if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName))
  Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName, 
    "window.onload = function() {myFunction();};", true);            

Моя проблема, если уже существует что-то в onload событие, чем это перезаписывает его. Как я пошел бы о разрешении двух пользовательских элементов управления каждому, выполняют JavaScript в onload событие?

Править: Спасибо за информацию о сторонних библиотеках. Я буду иметь в виду их.

59
задан Rich Churcher 14 January 2018 в 19:42
поделиться

7 ответов

Большинство предложенных "решений" является определенным для Microsoft, или требует чрезмерно увеличенных в размере библиотек. Вот один хороший путь. Это работает с совместимыми W3C браузерами и с Microsoft IE.

if (window.addEventListener) // W3C standard
{
  window.addEventListener('load', myFunction, false); // NB **not** 'onload'
} 
else if (window.attachEvent) // Microsoft
{
  window.attachEvent('onload', myFunction);
}
97
ответ дан user83421 24 November 2019 в 18:16
поделиться

Все еще существует ужасное решение (который является далеко нижним к использованию платформы или addEventListener / attachEvent), который должен сохранить ток onload событие:

function addOnLoad(fn)
{ 
   var old = window.onload;
   window.onload = function()
   {
       old();
       fn();
   };
}

addOnLoad(function()
{
   // your code here
});
addOnLoad(function()
{
   // your code here
});
addOnLoad(function()
{
   // your code here
});

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

DOM быть готовым означает, что Ваш HTML загрузился, но не внешние компоненты как изображения или таблицы стилей, позволив Вам быть названным задолго до огней события загрузки.

17
ответ дан Alexander Elgin 24 November 2019 в 18:16
поделиться

Mootools является другой большой платформой JavaScript, которая довольно проста в использовании, и как RedWolves сказал с jQuery Вы, банка может просто продолжать зажимать столько обработчиков, сколько Вы хотите.

Для каждого *.js файла, который я включаю, я просто обертываю код в функцию.

window.addEvent('domready', function(){
    alert('Just put all your code here');
});

И существуют также преимущества использования domready вместо onload

3
ответ дан cole 24 November 2019 в 18:16
поделиться

Попробуйте это:

window.attachEvent("onload", myOtherFunctionToCall);

function myOtherFunctionToCall() {
    // do something
}

редактирование: эй, я просто готовился войти в систему с Firefox и переформатировать это сам! Все еще не кажется коду формата для меня с IE7.

2
ответ дан Chris Farmer 24 November 2019 в 18:16
поделиться

Я не знаю много о ASP.NET, но почему бы не записать пользовательскую функцию для onload события, которое в свою очередь вызывает обе функции для Вас? Если у Вас есть две функции, назовите их обоих из третьего сценария, который Вы регистрируете для события.

1
ответ дан Derek Park 24 November 2019 в 18:16
поделиться

Вы рассмотрели использование чего-то как JQuery, который служит основой для очистки добавления нескольких обработчиков событий?

1
ответ дан Jeff Atwood 24 November 2019 в 18:16
поделиться

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

Page.ClientScript.RegisterStartupScript(
    this.GetType(), key1, function1, true);

Page.ClientScript.RegisterStartupScript(
    this.GetType(), key2, function2, true);

я полагаю, что это должно работать.

1
ответ дан Derek Park 24 November 2019 в 18:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: