Enhance.js Bibliotheken OnScript -Locload vor dem Laden von JQuery
-
30-09-2019 - |
Frage
Sehen Diese Demo aus der Filamentgruppe mithilfe ihrer progressiven Verbesserung Enhance.js Bibliothek
Änderungen zu geben:-
<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>
Ich bekomme einen "$ is undefinierten Fehler" in der Warnung vermutlich, weil JQuery noch nicht geladen hat.
HINWEIS - Der Alarm ($) ist nur zum Debuggen - ich versuche etwas mit diesem zB $ ('SOME -SELTEKTOR') zu tun - und kein $ (Handler) oder $ (Dokument). JQuery ist nicht geladen, $ ist nicht definiert.
Verbesserung ONSCRIPTLAD Sieht so aus
onScriptsLoaded:[runMyCode()]
und später
function runMyCode()
{
alert("runMyCode was called");
alert($);
}
Der erste Alarm funktioniert, aber $ ist immer noch nicht definiert.
Wenn ich RunmyCode auf einem Klickereignis einer Schaltfläche aufrufe, funktioniert es.
Die Frage ist also: Wie können Sie Code ausführen, sobald alle Skripte das Laden mit Enhance.js beendet haben?
PS Gleiches Problem in IE8/FF3/Chrome7 überprüft
Lösung
Ich denke, das ist, was Sie suchen, beachten Sie das onScriptsLoaded
wird direkt als Rückruf verwendet, Es sollte also eine Funktion sein, kein Array:
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($); }
});
Oder allgemeiner für eine Funktion, über die Referenz wie folgt bestehen:
onScriptsLoaded: runMyCode
Der Grund onScriptsLoaded:[runMyCode()]
"Art von" Werke ist es sofort Aufrufen der runMyCode
Funktion (zum Zeitpunkt dieser Zeile, die ausführt, nicht Wenn die Skripte fertig sind) und ein Array aus diesem Ergebnis herstellen. Dies macht tatsächlich einen Fehler, wenn Skripte abgeschlossen sind, seitdem onScriptsLoaded
Es wird erwartet, dass es eine Rückruffunktion ist, kein Array.
Andere Tipps
Ich denke, das kann ein Problem sein:
onScriptsLoaded:[runMyCode()]
Haben Sie es versucht (unter der Annahme, dass die Array -Notation korrekt ist): (bearbeiten - es ist nicht Korrekt)
onScriptsLoaded: [runMyCode]
? Im ersten Weg rufen Sie Ihre Funktion zum Zeitpunkt der Einrichtung der Bibliothek auf. Sie möchten stattdessen nur den Verweis auf Ihre Funktion übergeben.
bearbeiten Eigentlich sollte es nur sein:
onScriptsLoaded: runMyCode
Ich weiß nicht, woher das Array kam; Es wird in der Dokumentation "Enhance.js" definitiv nicht erwähnt.