$ не визначено за допомогою 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 на початку, а не в кінці .. але я не міг зрозуміти, як повернути значення, за допомогою цього формату я просто додав функцію return перед функцією самовикликання, і вона працює.
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 (document) .ready (функція ($) {... mor infos про 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.