В моем Пользовательском элементе управления 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 загрузился, но не внешние компоненты как изображения или таблицы стилей, позволив Вам быть названным задолго до огней события загрузки.
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);
я полагаю, что это должно работать.