Question

Dans mon contrôle utilisateur ASP.NET, j'ajoute du JavaScript au window.onload événement:

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

Mon problème est que s'il y a déjà quelque chose dans le onload événement, puis cela l'écrase.Comment pourrais-je permettre à deux contrôles utilisateur d'exécuter chacun du JavaScript dans le onload événement?

Modifier: Merci pour les informations sur les bibliothèques tierces.Je les garderai à l'esprit.

Était-ce utile?

La solution

La plupart des « solutions » suggérées sont spécifiques à Microsoft ou nécessitent des bibliothèques volumineuses.Voici une bonne façon.Cela fonctionne avec les navigateurs compatibles W3C et avec Microsoft IE.

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

Autres conseils

Il existe encore une solution laide (qui est bien inférieure à l'utilisation d'un framework ou addEventListener/attachEvent), c'est-à-dire sauvegarder le courant onload événement:

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

Notez que les frameworks comme jQuery fourniront un moyen d'exécuter du code lorsque le DOM est prêt et non lorsque la page se charge.

DOM étant prêt signifie que votre HTML a chargé mais pas de composants externes comme des images ou des feuilles de style, ce qui vous permet d'être appelé bien avant le déclenchement de l'événement de chargement.

J'ai eu un problème similaire aujourd'hui, alors je l'ai résolu en index.js avec ce qui suit :

window.onloadFuncs = [];

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

et dans les fichiers js supplémentaires auxquels je souhaite joindre l'événement onload, il me suffit de faire ceci :

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

J'utilise normalement jQuery, mais cette fois j'étais limité au js pur, ce qui m'a obligé à utiliser mon esprit pendant un moment !

Outils Mootools est un autre excellent framework JavaScript qui est assez facile à utiliser et, comme RedWolves l'a dit, avec jQuery vous pouvez simplement continuer à lancer autant de gestionnaires que vous le souhaitez.

Pour chaque fichier *.js que j'inclus, j'enveloppe simplement le code dans une fonction.

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

Et il y a aussi avantages d'utiliser domready au lieu de onload

Essaye ça:

window.attachEvent("onload", myOtherFunctionToCall);

function myOtherFunctionToCall() {
    // do something
}

modifier:hé, j'étais juste sur le point de me connecter avec Firefox et de reformater ceci moi-même !Il ne semble toujours pas formater le code avec IE7.

Je ne connais pas grand-chose à ASP.NET, mais pourquoi ne pas écrire une fonction personnalisée pour l'événement onload qui appelle à son tour les deux fonctions pour vous ?Si vous avez deux fonctions, appelez-les toutes les deux à partir d'un troisième script que vous avez inscrit à l'événement.

Avez-vous envisagé d'utiliser quelque chose comme JQuery qui fournit un cadre pour le nettoyage en ajoutant plusieurs gestionnaires d'événements ?

En fait, selon cette page MSDN, cela te ressemble peut appelez cette fonction plusieurs fois pour enregistrer plusieurs scripts.Il vous suffit d'utiliser des clés différentes (le deuxième argument).

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

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

Je pense que cela devrait fonctionner.

Je sais que cette question a reçu une réponse, mais je veux juste que vous connaissiez cette fonction :

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

salutations T

Vous pouvez le faire avec jquery

$(window).load(function () {
    // jQuery functions to initialize after the page has loaded.
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top