Добавить несколько событий 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событии?

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

13.08.2008 03:18:32
Рассматривали ли вы использовать что-то вроде JQuery, который обеспечивает основу для очистки добавления нескольких обработчиков событий?
Jeff Atwood 13.08.2008 03:30:58
Крошка, не нужно никаких вонючих библиотек! fyi, для firefox, его window.attachEvent ('load', myFunction); не window.attachEvent ('ONload', myFunction);
Frank Schwieterman 14.01.2009 02:49:13
8 ОТВЕТОВ
РЕШЕНИЕ

Большинство предлагаемых «решений» являются специфичными для 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);
}
99
27.03.2009 01:34:31
Примечание: функция назначена (myFunction) в window.attachEvent ('onload', myFunction); всегда запускается после любой функции, назначенной для window.onload
user961954 17.10.2011 22:02:35
извините, сэр, что означает, что NB не 'onload' означает?
meJustAndrew 22.11.2016 12:58:32
@meJustAndrew он имеет в виду, что когда вы используете addEventListener, вы не используете onload, вы просто используете load.
fmacdee 5.05.2017 19:24:30

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

1
13.08.2008 03:26:40

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

window.attachEvent("onload", myOtherFunctionToCall);

function myOtherFunctionToCall() {
    // do something
}

редактировать: эй, я только собирался войти в Firefox и переформатировать это сам! Похоже, до сих пор не отформатировать код для меня с IE7.

2
13.08.2008 03:33:50

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

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

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

Я считаю, что должно работать.

1
13.08.2008 03:39:06
Разве эти сценарии не выполняются, когда страница попадает к ним? Не во время загрузки?
Ray 18.12.2008 03:05:47

Mootools - еще одна замечательная среда JavaScript, которая довольно проста в использовании, и, как сказал RedWolves, с jQuery вы можете просто продолжать отбрасывать столько обработчиков, сколько захотите.

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

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

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

3
13.08.2008 04:16:01

Есть еще уродливое решение (которое намного хуже, чем использование фреймворка или 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 загружен, но не внешние компоненты, такие как изображения или таблицы стилей, что позволяет вам вызываться задолго до того, как сработает событие load.

17
11.02.2016 03:26:45

У меня была похожая проблема сегодня, поэтому я решил ее index.jsс помощью следующего:

window.onloadFuncs = [];

window.onload = function()
{
 for(var i in this.onloadFuncs)
 {
  this.onloadFuncs[i]();
 }
}

и в дополнительных файлах js, которые я хочу прикрепить к событию onload, я просто должен сделать это:

window.onloadFuncs.push(function(){
 // code here
});

Я обычно использую jQuery, но на этот раз я ограничился только js, которые какое-то время заставляли меня думать!

5
11.02.2016 03:27:34

Вы можете сделать это с помощью jquery

$(window).load(function () {
    // jQuery functions to initialize after the page has loaded.
});
1
11.02.2016 03:24:47