Ошибки Cannot read property 'fn' и Uncaught TypeError: $(…) - как исправить?

190
10 февраля 2019, 15:00

Есть на wordpress сайте страница калькулятора, где подключена библиотека formatter.js для корректного ввода телефона по патерну. Но, захожу на страницу и которую получаю ошибки вида:

jquery.formatter.min.js:1 Uncaught TypeError: Cannot read property 'fn' of undefined

Uncaught TypeError: $(...).formatter is not a function

В связи с чем они возникли? Вроде как все в шаблоне подключаю грамотно после объявления jquery.

Код functions.php

add_action( 'wp_enqueue_scripts', 'my_scripts_method' );
function my_scripts_method(){
    if ( is_page('calculator') ) {
    wp_enqueue_script( 'formatter-js', get_stylesheet_directory_uri() . '/jquery.formatter.min.js',array('jquery'),null,true);
    wp_enqueue_script( 'custom-js', get_stylesheet_directory_uri() . '/scripts.js',array('jquery'),null,true);
    }
}

Код scripts.js где вызываю formatter

jQuery(document).ready(function($) {
    $('.promo_phone_class').val('+7');
    $('.promo_phone_class').keyup(function(e) {
        if((e.keyCode == 8) || (e.keyCode == 46)) {
            if($(this).val() == '') {
                $(this).val('+7');
            }
        }
    });
    $('.promo_phone_class').formatter({
        'pattern': '+7({{999}}){{999}}-{{99}}-{{99}}',
        'persistent': false
    });
    $('[field=phone]').formatter({
        'pattern': '({{999}}){{999}}-{{99}}-{{99}}',
        'persistent': false
    });
});
Answer 1

WordPress использует jQuery noConflict mode. Именно поэтому первая строка вашего файла выглядит как jQuery(document).ready(function($) {, чтобы внутри него использовать символ $ вместо jQuery.

jQuery.formatter.js, однако, сразу пытается использовать символ $ в своём коде, не предполагая, что jQuery может быть запущен в noConflict mode.

Попробуйте взять исходный код jquery.formatter.js и заменить в нём $ на jQuery. Подключение скриптов будет выглядеть так:

wp_enqueue_script( 'formatter-js', get_stylesheet_directory_uri() . '/jquery.formatter.js',array('jquery'),null,true);
wp_enqueue_script( 'custom-js', get_stylesheet_directory_uri() . '/scripts.js',array('jquery', 'formatter-js'),null,true);

Обратите внимание на отсутствие min в первой строке и зависимость от formatter во второй.

READ ALSO
Как удалить кавычки из строки php?

Как удалить кавычки из строки php?

Приходят данные из базы:

494
Регулярные выражения: исключить буквы и оставить некоторые символы PHP

Регулярные выражения: исключить буквы и оставить некоторые символы PHP

Помогите составить регулярное выражение, которое проверяет строку на то, чтобы в ней были только цифры(от 7 до 15), но также среди цифр могли...

189
Opencart, разные валюты в админке и фронте

Opencart, разные валюты в админке и фронте

В админке по умолчанию выбрана валюта USD, и в настройках локализации выбрано значение для доллара 100000000

177