Enhance.js Libraries OnScriptloaded, запущенная перед загрузкой jQuery
-
30-09-2019 - |
Вопрос
Видеть это демонстрация от группы филаментов с использованием их прогрессивного улучшения Enhance.js библиотека
Изменение, чтобы дать:-
<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>
Я получаю «$ - неопределенная ошибка» в предупреждении, предположительно, потому что jQuery еще не загружен.
Примечание - оповещение ($) просто для отладки - я пытаюсь что -то сделать с этим, например, $ ('некоторый селектор) - и no $ (обработчик) или $ (документ). Reare и т. Д. jQuery не загружен, $ не определен.
Усиление onscript загружен Похоже, он должен сделать это, но если я добавлю
onScriptsLoaded:[runMyCode()]
и позже
function runMyCode()
{
alert("runMyCode was called");
alert($);
}
Первое предупреждение работает, но $ все еще не определен.
Если я вызову runmycode в событии нажатия кнопки, она работает.
Итак, вопрос в том, как вы можете запустить код после того, как все сценарии закончили загрузку с помощью Enhance.js?
PS та же проблема проверена в IE8/FF3/Chrome7
Решение
Я думаю, что это то, что тебе нужно, обратите внимание, что onScriptsLoaded
используется непосредственно в качестве обратного вызова, так что это должно быть функцией, а не массивом:
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($); }
});
Или в более общем плане для функции, передайте только ссылку, подобную следующему:
onScriptsLoaded: runMyCode
Причина onScriptsLoaded:[runMyCode()]
«Вроде» работы - это это немедленно вызывая runMyCode
функция (в то время, когда эта линия работает, нет Когда сценарии заканчиваются) и делает массив из этого результата. Это на самом деле принесет ошибку, когда сценарии закончится, так как onScriptsLoaded
Ожидается, что будет функцией обратного вызова, а не массивом.
Другие советы
Я думаю, что это может быть проблемой:
onScriptsLoaded:[runMyCode()]
Вы пробовали (при условии, что обозначение массива верна): (редактировать - это нет правильный)
onScriptsLoaded: [runMyCode]
? Первый путь вы называете свою функцию в то время, когда настраиваете библиотеку. Вместо этого вы хотите передать только ссылку на свою функцию.
редактировать на самом деле это должно быть:
onScriptsLoaded: runMyCode
Я не знаю, откуда пришел массив; Это определенно не упоминается в документации «Enhance.js».