Добавить несколько событий window.onload
В моем ASP.NET User Control я добавляю немного JavaScript в window.onload
событие:
if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName))
Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName,
"window.onload = function() {myFunction();};", true);
Моя проблема в том, что если в onload
событие, чем это переписывает это. Как бы я позволил двум пользовательским элементам управления выполнять JavaScript в onload
событие?
Изменить: Спасибо за информацию о сторонних библиотеках. Я буду помнить их.
10 ответов
Большинство предлагаемых "решений" являются специфичными для 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, который был вынужден некоторое время использовать свой ум!
Mootools - это еще одна отличная среда 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
С уважением T
Вы можете сделать это с помощью jquery
$(window).load(function () {
// jQuery functions to initialize after the page has loaded.
});