У меня есть простой jQuery script в плагине WordPress, который использует обертку jQuery следующим образом:
$(document).ready(function(){
// jQuery code is in here
});
Я вызываю этот script из панели инструментов WordPress и загружаю его после загрузки фрейма jQuery.
Когда я проверяю страницу в Firebug, я постоянно получаю сообщение об ошибке:
TypeError: $не является функцией
$(документ).ready(функция() {
Должен ли я переносить script в эту функцию:
(function($){
// jQuery code is in here
})(jQuery);
У меня была эта ошибка несколько раз, и я не уверен, как ее обрабатывать.
Любая помощь будет принята с благодарностью.
По умолчанию, когда вы вставляете jQuery в Wordpress, вы должны использовать jQuery
, а $
не используется (это для совместимости с другими библиотеками).
Ваше решение обернуть его в function
будет работать нормально, или вы можете загрузить jQuery другим способом (но это, вероятно, не очень хорошая идея в Wordpress).
Если вы должны использовать document.ready
, вы можете передать $
в вызов функции:
jQuery(function ($) { ...
Это должно исправить:
jQuery(document).ready(function($){
//you can now use $ as your jQuery object.
var body = $( 'body' );
});
Проще говоря, WordPress запускает собственные скрипты, прежде чем вы сможете, и они выпускают $
var, чтобы он не сталкивался с другими библиотеками. Это делает общий смысл, поскольку WordPress используется для всех видов веб-сайтов, приложений и, конечно же, блогов.
Из их документации:
Библиотека jQuery, включенная в WordPress, установлена в noConflict() mode (см. wp-includes/js//jquery.js). Это необходимо для предотвращения проблемы совместимости с другими библиотеками JavaScript, которые WordPress может связываться.
В режиме noConflict() глобальный $shortcut для jQuery не является доступны...
Это решение сработало для меня
;(function($){
// your code
})(jQuery);
Переместите свой код внутри закрытия и используйте $
вместо jQuery
Я нашел указанное решение в https://magento.stackexchange.com/questions/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma
... после слишком большого поиска
Вы можете избежать конфликтов, подобных этому
var jq=jQuery.noConflict();
jq(document).ready(function(){
alert("Hi this will not conflict now");
jq('selector').show();
});
Попробуйте следующее:
<script language="JavaScript" type="text/javascript" src="/jquery.js"></script>
<script>
jQuery.noConflict();
(function ($) {
function readyFn() {
// Set your code here!!
}
$(document).ready(readyFn);
})(jQuery);
</script>
Вам нужно передать $in function()
<script>
jQuery(document).ready(function($){
// jQuery code is in here
});
</script>
var $=jQuery.noConflict();
$(document).ready(function(){
// jQuery code is in here
});
Кредит Ашвани Панвару и Циссоу: https://stackoverflow.com/questions/12343714/typeerror-is-not-a-function-when-calling-jquery-function
Двойная проверка ссылок на jQuery. Возможно, вы ссылаетесь на него более одного раза или вы слишком рано вызываете свою функцию (до определения jQuery). Вы можете попробовать, как указано в моих комментариях, и поместить любую ссылку jQuery в верхнюю часть вашего файла (в голове) и посмотреть, помогает ли это.
Если вы используете инкапсуляцию jQuery, это не поможет в этом случае. Пожалуйста, попробуйте, потому что я думаю, что это красивее и более очевидно, но если jQuery не определен, вы получите те же ошибки.
В конце... jQuery в настоящее время не определен.
script
который ссылается на JQuery
в начало вашего index.html
и он, вероятно, будет работать
Что сработало для меня. Первой библиотекой для импорта является библиотека запросов и справа, а затем вызов метода jQuery.noConflict().
<head>
<script type="text/javascript" src="/jquery.min.js"/>
<script>
var jq = jQuery.noConflict();
jq(document).ready(function(){
//.... your code here
});
</script>
Использование
jQuery(document).
вместо
$(document).
или
Внутри функции $указывает на jQuery, как вы ожидали бы
(function ($) {
$(document).
}(jQuery));
Вы сталкиваетесь с этой проблемой, когда имя вашей функции и одно из имен имен в файле одинаково. просто убедитесь, что все ваши имена имен в файле уникальны.
<script>
var jq=jQuery.noConflict();
(function ($)
{
function nameoffunction()
{
// Set your code here!!
}
$(document).ready(readyFn);
})(jQuery);
теперь используйте jq вместо jQuery
$
в консоли и нажмете ввод - что вы видите?