les bibliothèques d'amélioration.js onScriptEd en cours d'exécution avant que jQuery ne charge

StackOverflow https://stackoverflow.com/questions/4134464

Question

Voir cette démo du groupe de filament utilisant leur amélioration progressive améliorer.js bibliothèque

Modification pour donner: -

<script type="text/javascript" src="../_shared/EnhanceJS/enhance.js"></script>
<script type="text/javascript"> 
// Run capabilities test
enhance({
loadScripts: [
 {src: 'js/excanvas.js', iecondition: 'all'},
 '../_shared/jquery.min.js',
 'js/visualize.jQuery.js',
 'js/example.js'
],
loadStyles: [
'css/visualize.css',
'css/visualize-dark.css'
] 
}); 

    alert($);

</script> 

J'obtiens une erreur "$ est non définie" sur l'alerte vraisemblablement parce que jQuery n'a pas encore chargé.

Remarque - L'alerte ($) est juste pour le débogage - j'essaie de faire quelque chose avec cette $ ('some-selector') - et pas de $ (gestionnaire) ou $ (document) .ready etc ne fonctionne pas non plus - JQuery n'est pas chargé, $ n'est pas défini.

améliorer surléné On dirait que ça devrait faire, il trompe mais si j'ajoute

onScriptsLoaded:[runMyCode()]

et ensuite

function runMyCode()
{
    alert("runMyCode was called");
    alert($);
}

La première alerte fonctionne mais $ n'est toujours pas défini.

Si j'appelle RunMycode sur un événement de clic d'un bouton, cela fonctionne.

La question est donc - comment pouvez-vous exécuter du code une fois que tous les scripts ont terminé le chargement avec améliorer.js?

Ps même problème vérifié dans ie8 / ff3 / chrome7

Était-ce utile?

La solution

Je pense que c'est ce que vous recherchez, notez que onScriptsLoaded est utilisé directement comme rappel, il devrait donc être une fonction, pas un tableau:

enhance({
   loadScripts: [
    {src: 'js/excanvas.js', iecondition: 'all'},
    '../_shared/jquery.min.js',
    'js/visualize.jQuery.js',
    'js/example.js'
   ],
   loadStyles: [
    'css/visualize.css',
    'css/visualize-dark.css'
   ],
   onScriptsLoaded: function() { alert($); }
});

Ou plus généralement pour une fonction, passez juste la référence comme celle-ci:

   onScriptsLoaded: runMyCode

La raison onScriptsLoaded:[runMyCode()] "Le genre" fonctionne, c'est immédiatement invoquant le runMyCode Fonction (à l'époque cette ligne s'exécute, ne pas Lorsque les scripts se terminent) et fabrique un tableau à partir de ce résultat. Cela lancera en fait une erreur lorsque les scripts termineront, car onScriptsLoaded devrait être une fonction de rappel, pas un tableau.

Autres conseils

Je pense que cela peut être un problème:

onScriptsLoaded:[runMyCode()]

Avez-vous essayé (en supposant que la notation du tableau est correcte): (Éditer - c'est ne pas corriger)

onScriptsLoaded: [runMyCode]

? La première façon, vous appelez votre fonction au moment où vous configurez la bibliothèque. Vous voulez plutôt passer la référence à votre fonction.

Éditer En fait, il devrait être juste:

onScriptsLoaded: runMyCode

Je ne sais pas d'où vient le tableau; Il n'est certainement pas mentionné dans la documentation "Enhance.js".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top