$ не определен при использовании jQuery в WordPress

14 окт. 2010 г., 18:27:21
Просмотры: 53K
Голосов: 38

Я знаю, что 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;
    })
});

работает нормально.

0
Все ответы на вопрос 3
3
51

Вы можете обернуть ваш 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, из-за чего $ остается неопределенным.

14 окт. 2010 г. 18:38:33
Комментарии

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

Mild Fuzz Mild Fuzz
14 окт. 2010 г. 18:46:28

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

eselk eselk
15 янв. 2015 г. 20:08:33

Очень полезный ответ.

MarkSkayff MarkSkayff
1 нояб. 2017 г. 22:04:41
4
32

Вы почти у цели!

jQuery(document).ready(function($){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })

});

Вам необходимо передать ссылку на jQuery как функцию $ в ваш метод, иначе он не будет работать. Если вы просто поместите символ $ внутрь первого вызова function(), как я сделал выше, все будет работать отлично.

14 окт. 2010 г. 18:41:38
Комментарии

+1: Это более читаемо, чем размещение jQuery в конце.

fuxia fuxia
14 окт. 2010 г. 20:42:45

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

BryanH BryanH
15 окт. 2010 г. 02:55:29

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

EAMann EAMann
15 окт. 2010 г. 04:39:10

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

bueltge bueltge
15 окт. 2010 г. 15:46:46
0

Передача функции в jQuery является сокращением для $(document).ready(...). Затем, помещая $ в качестве первого параметра вашей callback-функции, вы создаёте псевдоним для jQuery внутри этой функции:

jQuery(function($) {
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    });
});

Вы можете ознакомиться с документацией по этой теме здесь.

10 окт. 2013 г. 02:18:45