2009-10-20 6 views
0

J'ai une page asp.net qui charge des scripts javascript. L'un de ces scripts charge des contrôles dans la page en les ajoutant au corps dans l'événement window.onload.Javascript après window.onload?

J'ai besoin d'injecter un script via code behind pour appeler une méthode des scripts qui dépend des contrôles créés dans window.onload. Cela ne fonctionne pas parce que chaque appel que je fais est toujours trop tôt et les contrôles ne sont pas créés pour le moment. Si je l'appelle, par exemple, onclick dans un lien hypertexte cela fonctionne parce que les contrôles ont déjà été créés dans le onload.

donc: 1-<script type="text/javascript" src="/Scripts/somefile.js"></script>

2 - addEvent(window, "load", blabla); - les js prépare au-dessus des contrôles à annexer au corps sur l'événement onload

3 - Dans le code derrière je tente d'écrire un script à la page par this.Page.ClientScript.RegisterStartupScript ou this.Page.ClientScript.RegisterClientScriptBlock ou tout ce qui devrait appeler une méthode sur le .js ci-dessus, qui dépend du contrôle chargé sur l'événement onload. Cette étape échoue car le contrôle n'est pas encore dans le DOM.

Une suggestion sur comment faire l'appel après l'événement window.onload?

Répondre

1

Si vous pouvez utiliser jQuery

vous pouvez appeler le script après que la charge DOM est terminée.

$(document).ready() 

Introducing $(document).ready()

+0

Non, je ne peux pas. Je veux dire, je pourrais, mais pour des raisons qui ne sont pas intéressantes pour cet espace, je dois m'en tenir au javascript, pas de bibliothèques. Mais tks pour la suggestion. – Dante

+0

Vous voulez expliquer le vote à la baisse? – rahul

1

Vous pouvez enregistrer le fichier js comme vous enregistrez le script de démarrage:

this.Page.ClientScript.RegisterClientScriptInclude("scriptKey", "/Scripts/somefile.js"); 
3

créer une gamme de fonctions:

<script> 
    var onLoadFunctions = []; 

    function addOnLoad(funcName) { 
    onLoadFunctions[onLoadFunctions.length] = funcName; 
    } 

    function executeOnLoad() { 
    for (var i=0; i<onLoadFunctions.length; i++) onLoadFunctions[i](); 
    } 

    addOnLoad(foobar); 
    addOnLoad(blabla); 
    addOnLoad(theother); 

    window.onload = executeOnLoad; 
</script> 
1

En utilisant Prototype JavaScript, vous pouvez avoir des scripts appelés quand le DOM est prêt (see the API here):

document.observe("dom:loaded", function() { 
    alert('The DOM is ready.'); 
}); 

Je recommande de transférer le script qui se charge en cas onload à l'événement dom:loaded.

1

Au lieu de cela window.onload, vous pouvez utiliser l'événement pour ce document.onreadystatechange ,, ci-dessous l'extrait de l'échantillon ..

document.onreadystatechange=onReady; 
    function onReady() { 
     if (document.readyState=="complete") { 
     alert('The document ready state is "complete"') 
     } 
+0

Notez que onreadystatechange est une extension Microsoft. Ce n'est pas supporté par Mozilla (le moteur derrière Firefox). https://developer.mozilla.org/en/DOM/document.onreadystatechange –

+0

@jan, oui son droit ... OP mentioed ASP.net .. donc je juste si IE est relevent .. :) – RameshVel

0

J'ai essayé plusieurs approches sans succès. Je viens de changer les exigences de l'entreprise et le script est déclenché par une action de l'utilisateur, par opposition à un script injecté via le code derrière. Mais pour quelqu'un qui cherche une réponse, il y a plusieurs candidats possibles qui pourraient résoudre le problème dans votre cas.

Questions connexes