2010-06-02 8 views
0

J'ai une question et une question ci-dessous le code WRT:Portée de cette variable JavaScript

Ma question est quelle est la portée de la loaded variables ici. La raison pour laquelle je demande ceci est le code onload="if(loaded==1)inittextarea() fonctionne bien sur Firefox et pas IE8. Pourquoi cela arrive-t-il? Y a-t-il quelque chose de spécifique que je dois faire ici? Ou n'est-ce pas une pratique valable?

<html> 
<head> 
<title>Some Page</title> 
<link rel="stylesheet" href="../css/default.css" type="text/css"> 
<script type="text/javascript"> 
    var loaded = 0; /*Point of interest*/ 
    function jsLoaded() { 
    loaded =1; 
} 
</script> 
<script type="text/javascript"> 
    function inittextarea() { 
     alert("test") 
     tinyMCE.init({ 
      elements : "content", 
      theme : "advanced", 
      readonly : true, 
      mode : "exact", 
      theme : "advanced", 
      readonly : true, 
      setup : function(ed) { 
       ed.onInit.add(function() { 
       tinyMCE.activeEditor.execCommand("mceToggleVisualAid"); 
       }); 
      } 
     }); 
    } 
</script> 
<script src="../js/tiny_mce/tiny_mce.js" onload="jsLoaded()" type="text/javascript"></script> 
</head> 
<body onload="if(loaded==1)inittextarea()"><!--Works on Firefox only--> 
    *Usual stuff* 
</body></html> 

Des pointeurs s'il vous plaît?

Répondre

3

onload sur <script> les éléments ne sont généralement pas pris en charge. Vous pouvez contourner ce problème en mettant simplement un élément <script> sous l'élément TinyMCE <script>:

<script src="../js/tiny_mce/tiny_mce.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    jsLoaded(); 
</script> 

Bien fait cela est inutile: le temps <body> « s onload feux, tout le JavaScript sera assuré d'avoir chargé, donc il n'y a pas besoin de la vérification:

<body onload="inittextarea()"> 
+0

Meilleure réponse. Pourquoi utiliser 'jsLoaded' quand vous manipulez déjà l'événement' load'? – Alsciende

2

L'utilisation d'une charge dans l'étiquette du corps est maintenant considérée comme une meilleure pratique. Peut-être devriez-vous revoir la façon dont votre initialisation a lieu.

Cette description de article.

+0

en fait, en utilisant 'onload' attribut de l'élément' 'est la seule façon standardisée de capturer le fait que le document a chargé donc pourrait être considéré comme la meilleure pratique. –

+0

@tarskythehutch @Tim A partir de maintenant j'ai quelques limitations dans l'utilisation de l'approche mentionnée dans http://www.onlinetools.org/articles/unobtrusivejavascript/chapter4.html. Alors, y a-t-il un moyen de modifier quelque chose dans l'approche actuelle pour que cela fonctionne dans IE? – dkris

+0

Voir ma réponse mise à jour. –

1

Le problème est que Script onLoad ne fonctionne pas dans IE.

+0

Que pensez-vous est l'alternative pour cela? Des solutions de contournement? – dkris

+0

J'utilise toujours JQuery. Ensuite, j'initialise TinyMCE dans le document.load. Fonctionne bien et vous obtenez beaucoup plus avec la bibliothèque qui vous sera utile! Et vous n'avez pas besoin de vous inquiéter autant des différences individuelles de navigateur. Tout le monde est gagnant! ;-) –