Проблемы скрипта в WordPress («$ не определено») - PullRequest
11 голосов
/ 29 сентября 2010

Надеюсь, это довольно простое исправление для вас, ребята:)

Я создаю тему WordPress, и ранее довольно плохо вызывал скрипт jquery в теге html head.Это вызывало некоторую задержку загрузки в Opera, хотя я подозреваю, что я пытался загрузить jquery одновременно двумя способами ... в любом случае, сейчас я делаю это правильно в файле functions.php, но мой дальнейший сценарий зависит отjquery играет не очень хорошо.

Вот фрагмент того, как я сейчас ставлю jquery в очередь, и мой сценарий (для скользящей панели):

add_action('init', 'my_init');
function my_init() {
    if (!is_admin()) {
        wp_deregister_script('jquery');
        wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js', false, '1.4.2', true);
        wp_enqueue_script('jquery');
        wp_enqueue_script('slide_script', get_template_directory_uri() . '/scripts/slide.js');
        echo "alert( 'Hello Admin!' );";
    }
}

и вот мой сценарий скользящей панели:

$(document).ready(function(){
    $(".btn-slide").click(function(){
        var $marginLefty = $("#slide-panel");
    $marginLefty.animate({
      marginLeft: parseInt($marginLefty.css('marginLeft'),10) == 0 ? 
        $marginLefty.outerWidth() :
        0
                        });
                                    });
                            });

все это работало, когда я просто вызывал jquery в тегах head, а затем помещал этот скрипт в теги script непосредственно после этого, но теперь firebug показывает, что он выдает «$ is notfined» и изменяет $к jquery выдает "jquery не определен" ... кто-нибудь может помочь?

Ответы [ 8 ]

14 голосов
/ 29 сентября 2010

убедитесь, что вы указываете, что ваш скрипт зависит от jQuery, выполнив это в wp_enqueue -> wp_enqueue_script('slide_script', get_template_directory_uri() . '/scripts/slide.js', array('jquery'));

Обратите внимание на array('jquery') Это означает, что ваш скрипт зависит от jQuery.

14 голосов
/ 29 сентября 2010

Используйте jQuery с заглавной буквы Q вместо $, чтобы заставить его работать.Wordpress обычно содержит скрипт, который вызывает jQuery.noConflict() в конце, оставляя $ неопределенным.Результат должен быть примерно таким:

jQuery(function($) { //jQuery passed in as first param, so you can use $ inside
  $(".btn-slide").click(function(){
    var $marginLefty = $("#slide-panel");
    $marginLefty.animate({
      marginLeft: parseInt($marginLefty.css('marginLeft'),10) == 0 ? $marginLefty.outerWidth() : 0
    });
  });
});
1 голос
/ 02 марта 2016

Единственный способ исправить эту проблему - заменить все «$» на «jQuery» в сценарии, который вы включаете.

В вашем случае ваш новый скрипт будет выглядеть так:

jQuery(document).ready(function(){
    jQuery(".btn-slide").click(function(){
        var jQuerymarginLefty = jQuery("#slide-panel");
    jQuerymarginLefty.animate({
      marginLeft: parseInt(jQuerymarginLefty.css('marginLeft'),10) == 0 ? 
        jQuerymarginLefty.outerWidth() :
        0
                        });
                                    });
                            });
1 голос
/ 14 марта 2015

Я знаю, что на этот вопрос уже получен ответ, но хотел бы добавить к нему.

Если это файл, скорее всего, проблема заключается в том, чтобы включить jQuery в качестве зависимости для вашего скрипта.wp_enqueue_script('script_name', get_template_directory_uri() . '/path_and_script_name.js', array('jquery'));

Если у вас есть объект jQuery, но нет $, вы можете попробовать это:

<script id="script-below-jquery-src">
(function($) {
   // Anything here can only immediately reference the DOM above it
   $(function(){
     //on DOM (document) ready
   });
})(jQuery);
</script>

Этот скрипт относится к тегу скрипта jQuery.

Если он все ещежалуется, что jQuery не определен, проверьте <head> на наличие скрипта jQuery, если его там нет, вы не регистрируете / ставите его в очередь должным образом.В моем случае я добавил фильтр, который удалял все теги.Для отладки вы могли бы использовать ...

add_filter('script_loader_tag', function($tag, $handle){
  /*maybe echo/print here*/
  return $tag . "<!-- Script for handle '$handle' -->";
}, 10, 2);

Но, честно говоря, это не будет намного полезнее, чем просто просмотр вашего заголовка.

Убедитесь, что вы используетеadd_action('wp_enqueue_scripts', /*function name*/);.Многие другие перехваты опаздывают.

Не вставляйте источник jQuery выше <?php wp_head(); ?> в заголовок.Он менее удобен в обслуживании, особенно в jQuery, и, вероятно, скрипт будет включен дважды, если того требует плагин и т. Д.

1 голос
/ 30 декабря 2013

Оберните вашу функцию в так называемую функцию "domReady" :

<script>
(function($) {
   //insert function here
})(jQuery);
</script>
1 голос
/ 06 июня 2013

Если кто-то все еще испытывает проблемы после этих полезных советов, пожалуйста, прочитайте подробности на http://codex.wordpress.org/Function_Reference/wp_enqueue_script

По этой ссылке вы можете найти подробности для всех возможных ситуаций.

И убедитесь, что вы вызываете wp_enqueue_script для каждого сценария JS, который вы используете.Никогда не связывайте их напрямую, и все будет в порядке;)

0 голосов
/ 10 января 2018

var $ = jQuery;

, но вы можете использовать jQuery (function () {alert ("Document Ready")});

0 голосов
/ 01 мая 2012

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

wp_enqueue_script('slide_script', get_template_directory_uri() . '/scripts/slide.js', array('jquery'));

Но на самом деле лучше всего определять пользовательскую переменную без конфликтов следующим образом:

var $j = jQuery.noConflict();

$j(document).ready(function() {
    $j(".btn-slide").click(function(){
        var $jmarginLefty = $j("#slide-panel");
        $jmarginLefty.animate({
            marginLeft: parseInt($jmarginLefty.css('marginLeft'),10) == 0 ? $jmarginLefty.outerWidth() : 0
        });
    });
});

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...