Pregunta

En mi control de usuario ASP.NET estoy agregando algo de JavaScript al window.onload evento:

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 el onload evento, entonces esto lo sobrescribe.¿Cómo haría para permitir que dos controles de usuario ejecuten JavaScript cada uno en el onload ¿evento?

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

¿Fue útil?

Solución

La mayoría de las "soluciones" sugeridas son específicas de Microsoft o requieren bibliotecas infladas.Esta es 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);
}

Otros consejos

Todavía hay una solución fea (que es muy inferior a usar un marco o addEventListener/attachEvent) es decir para guardar el actual 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.

El hecho de que DOM esté listo significa que su HTML se ha cargado, pero no los componentes externos como imágenes u hojas de estilo, lo que le permite ser llamado mucho antes de que se active el evento de carga.

Tuve un problema similar hoy así que lo resolví teniendo un index.js con lo siguiente:

window.onloadFuncs = [];

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

y en archivos js adicionales a los que quiero adjuntar el evento de carga solo tengo que hacer esto:

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

Normalmente uso jQuery, pero esta vez estaba restringido a js puro, lo que me obligó a usar mi mente por un tiempo.

Mootools es otro excelente marco de JavaScript que es bastante fácil de usar y, como dijo RedWolves con jQuery Puedes seguir lanzando tantos manipuladores como quieras.

Por cada archivo *.js que incluyo, simplemente envuelvo el código en una función.

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

Y también hay ventajas de usar domready en lugar de onload

Prueba esto:

window.attachEvent("onload", myOtherFunctionToCall);

function myOtherFunctionToCall() {
    // do something
}

editar:Oye, ¡me estaba preparando para iniciar sesión con Firefox y reformatearlo yo mismo!Todavía no parece formatear el código con IE7.

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

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

En realidad, según esta página de MSDN, Se parece a ti poder Llame a esta función varias veces para registrar varios scripts.Solo necesitas usar claves diferentes (el segundo argumento).

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

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

Creo que eso debería funcionar.

Sé que esto ha sido respondido, pero solo quiero que sepas sobre esta función:

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

saludos T

Puedes hacer esto con jquery.

$(window).load(function () {
    // jQuery functions to initialize after the page has loaded.
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top