2008-08-13 25 views
56

En mi ASP.NET control de usuario que estoy añadiendo algo de JavaScript al evento window.onload:Añadir múltiples eventos window.onload

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

Mi problema es que si ya hay algo en caso onload, que esto lo sobrescribe ¿Cómo podría permitir que dos controles de usuario ejecuten JavaScript en el evento onload?

Edit: Gracias por la información sobre las bibliotecas de terceros. Los tendré en cuenta.

+1

Dont wee no necesitan de las bibliotecas apestoso! fyi, para firefox, su window.attachEvent ('load', myFunction); no window.attachEvent ('ONload', myFunction); –

Respuesta

93

La mayor parte de las "soluciones" sugeridas son de Microsoft específico, o requieren bibliotecas infladas Aquí hay una buena manera. Esto funciona con navegadores compatibles con W3C y con Microsoft IE.

if (window.addEventListener) // W3C standard 
{ 
    window.addEventListener('load', myFunction, false); // NB **not** 'onload' 
} 
else if (window.attachEvent) // Microsoft 
{ 
    window.attachEvent('onload', myFunction); 
} 
+1

Nota: función asignada (myFunction) en window.attachEvent ('onload', myFunction); siempre se dispara después de cualquier función asignada a window.onload – user961954

+1

discúlpeme señor, ¿qué significa NB ** not ** 'onload'? – meJustAndrew

+0

@meJustAndrew quiere decir que cuando usas addEventListener no utilizas 'onload' solo utilizas 'load'. – fmacdee

1

No sé mucho sobre ASP.NET, pero ¿por qué no escribir una función personalizada para el evento de carga que a su vez llama a ambas funciones para usted? Si tiene dos funciones, llámelas desde un tercer script que registre para el evento.

2

¿Ha considerado usar algo como JQuery que proporciona un marco para limpiar y agregar controladores de eventos múltiples?

+2

¿Podría ampliar esto? – adhanlon

2

Prueba esto:

window.attachEvent("onload", myOtherFunctionToCall); 

function myOtherFunctionToCall() { 
    // do something 
} 

edición: hey, yo estaba preparando para iniciar sesión con Firefox y volver a formatear esto mismo! Todavía no parece formatear código para mí con IE7.

1

En realidad, de acuerdo con this MSDN page, parece que puede llamar a esta función varias veces para registrar varias secuencias de comandos. Solo necesita usar diferentes claves (el segundo argumento).

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

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

Creo que debería funcionar.

+0

¿No se ejecutan estos scripts cuando la página los recibe? No durante la carga? – Ray

4

Mootools es otro gran marco de JavaScript que es bastante fácil de usar, y como RedWolves dijo con jQuery, puede simplemente seguir utilizando tantos controladores como desee.

Por cada archivo * .js que incluyo Acabo de envolver el código en una función.

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

Y hay también advantages of using domready instead of onload

17

Todavía es una solución fea (que es muy inferior a la utilización de un marco o addEventListener/attachEvent) que es salvar la corriente onload evento:

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 
}); 

Tenga en cuenta que los marcos como jQuery proporcionarán una forma de ejecutar código cuando el DOM esté listo y no cuando se cargue la página.

DOM está listo significa que su HTML tiene componentes cargados, pero no externos, como imágenes o hojas de estilo, lo que le permite ser llamado mucho antes de que se active el evento de carga.

4

que tenía un problema similar en la actualidad por lo que lo resolví tener un index.js con lo siguiente:

window.onloadFuncs = []; 

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

y en los archivos js adicionales que quiero unir el proceso de carga sólo tengo que hacer esto :

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

normalmente utilizo jQuery sin embargo, pero esta vez se limitó a js puros wich obligado a usar mi mente por un tiempo!

1

Usted puede hacer esto con jQuery

$(window).load(function() { 
    // jQuery functions to initialize after the page has loaded. 
}); 
Cuestiones relacionadas