2009-02-27 6 views
1

Je suis en train de refactoriser une page qui utilise <body onload="myJS();"> pour un contrôle utilisateur. Je comprends que je peux le faire en utilisant l'inscription de script côté serveur sur le chargement.Remplacement de body.onload dans un contrôle utilisateur

Si je veux le faire du côté client (ascx), comment est-ce que je ferais ceci?

Répondre

2

Taken de http://snipplr.com/view/3116/cross-browser-add-event-listener/

// Cross-browser implementation of element.addEventListener() 

function addEvent(evnt, elem, func) { 
    if (elem.addEventListener) // W3C DOM 
     elem.addEventListener(evnt,func,false); 
    else if (elem.attachEvent) { // IE DOM 
     var r = elem.attachEvent("on"+evnt, func); 

    return r; 
} 

Utilisez comme ceci: addEvent(window, your_onload_handler). Ou vous pourriez juste utiliser jquery pour ceci et beaucoup d'autres choses.

+0

Pourriez-vous élaborer plus? Où mettons-nous l'appel à 'addEvent (window, your_onload_handler)'? Avec 'your_onload_handler', voulez-vous dire la fonction que nous voulons appeler lorsque le contrôle utilisateur est chargé? La méthode 'addEvent' a trois paramètres, pourquoi ne transmettez-vous que deux? –

2

L'approche côté client de Romme est la meilleure. Mais juste au cas où quelqu'un voulait savoir comment le faire en utilisant le code côté serveur dans le fichier ASCX, coller ceci dans le haut de votre modèle:

<script runat="server"> 

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    string strScript = "myJS();"; 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "OnLoadScript_" + this.ClientID, strScript, true); 
} 

</script> 
1

OnLoad est généralement une mauvaise façon d'initialiser JS , car il n'est déclenché que lorsque toutes les ressources ont été chargées (y compris les images de la page).

Le plus simple et plus fiable pour appeler Javascript que vous voulez exécuter lorsque la la page fin du chargement est de mettre en ligne <script> bloc dans le fond de votre code HTML, juste avant la balise de fermeture </body>:

<body> 
    ... your page here ... 
    <script>myJS();</script> 
</body> 
</html> 
+0

Pouvez-vous expliquer pourquoi il est mauvais d'init JS après que toutes les ressources ont fini de charger? – DotnetDude

+0

Vous souhaitez généralement différer l'initialisation JS jusqu'à ce que la page soit chargée, car vous devrez peut-être utiliser le DOM de la page. Les ressources comme les images ne sont probablement pas nécessaires à votre JS pour init correctement, mais si vous les attendez, il faut plus de temps pour démarrer votre initialisation, ce qui rend la page plus lente. – levik

Questions connexes