$ не определен при использовании jQuery в WordPress
Я знаю, что jQuery загружен, потому что когда я заменяю $
на 'jQuery', всё работает как ожидается, но скрипт будет неаккуратным, если я не смогу это исправить
Этот скрипт:
jQuery(document).ready(function(){
$("ul.vimeo_desc_feed li a").click(function(){
alert($(this).attr('href'));
return false;
})
});
Выдает ошибку $ is not a function
Этот скрипт:
jQuery(document).ready(function(){
jQuery("ul.vimeo_desc_feed li a").click(function(){
alert(jQuery(this).attr('href'));
return false;
})
});
работает нормально.

Вы можете обернуть ваш JavaScript в самовызывающуюся функцию, передав jQuery
в качестве аргумента и используя $
в качестве имени локальной переменной. Например:
(function($) {
$(document).ready(function(){
$("ul.vimeo_desc_feed li a").click(function(){
alert($(this).attr('href'));
return false;
})
});
}(jQuery));
должно работать как задумано.
Если я правильно помню, версия jQuery, поставляемая с WordPress (та, которую вы получаете при использовании wp_enqueue_script('jquery')
), сразу включает режим no-conflict, из-за чего $
остается неопределенным.

А, понятно. Я раньше добавлял это вручную, поэтому и не сталкивался с такой проблемой.

Спасибо, я использовал альтернативный формат с jQuery в начале вместо конца.. но не мог понять, как вернуть значение. С этим форматом я просто добавил return перед самовызывающейся функцией, и это сработало.

Вы почти у цели!
jQuery(document).ready(function($){
$("ul.vimeo_desc_feed li a").click(function(){
alert($(this).attr('href'));
return false;
})
});
Вам необходимо передать ссылку на jQuery как функцию $
в ваш метод, иначе он не будет работать. Если вы просто поместите символ $ внутрь первого вызова function()
, как я сделал выше, все будет работать отлично.

...но это не стандартный способ написания анонимной функции. http://forum.jquery.com/topic/jquery-anonymous-function-calls

И да, и нет. Оба способа считаются "стандартными". Один создает синглтон-класс, где $
определен локально. Другой просто определяет обработчик для события ready
документа и передает объект jQuery в обработчик как $
. Если вы пытаетесь подключиться к событию ready
, второй способ используется чаще. Если вам нужен jQuery для других целей (например, для работы с $.browser
), вы бы использовали синглтон-класс.

+1 за jQuery(document).ready(function($){... Дополнительную информацию о jQuery и WordPress вы также можете прочитать в моей статье: http://wpengineer.com/2028/small-tips-using-wordpress-and-jquery/ .

Передача функции в jQuery является сокращением для $(document).ready(...)
. Затем, помещая $
в качестве первого параметра вашей callback-функции, вы создаёте псевдоним для jQuery внутри этой функции:
jQuery(function($) {
$("ul.vimeo_desc_feed li a").click(function(){
alert($(this).attr('href'));
return false;
});
});
Вы можете ознакомиться с документацией по этой теме здесь.
