Вопрос

В моем пользовательском элементе управления 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 событие?

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

Это было полезно?

Решение

Большинство предлагаемых "решений" специфичны для 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);
}

Другие советы

Все еще существует уродливое решение (которое намного уступает использованию фреймворка или 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.

Сегодня у меня была похожая проблема, поэтому я решил ее с помощью 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, что заставило меня некоторое время поработать умом!

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

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

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

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

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

window.attachEvent("onload", myOtherFunctionToCall);

function myOtherFunctionToCall() {
    // do something
}

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

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

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

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

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

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

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

Я знаю, что на этот вопрос был дан ответ, но я просто хочу, чтобы вы знали об этой функции:

http://phrogz.net/JS/AttachEvent_js.txt

с уважением, Т

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

$(window).load(function () {
    // jQuery functions to initialize after the page has loaded.
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top