$ не определено с помощью jQuery в WordPress


32

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

работает отлично.

Ответы:


42

Вы можете обернуть свой javascript внутри самовозглашающейся функции, а затем передать ее jQueryв качестве аргумента, используя в $качестве имени локальной переменной. Например:

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

должен работать как задумано.

Если я правильно помню, поставляемая WP версия jQuery (та, которую вы получаете, если вы wp_enqueue_script('jquery')) немедленно помещает jQuery в конфликт, вызывая $неопределенность.


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

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

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

32

Ты почти там!

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

});

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


4
+1: это более читабельно, чем положить jQueryв конец.
fuxia

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

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

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

6

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

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

Вы можете увидеть документацию для этого здесь .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.