サポート » 使い方全般 » テーマの jQuery が動作しない

  • 解決済 KonpeitoRO

    (@konpeitowp)


     お世話になっております。最近 JavaScript について学び始めたものです。

      WordPress 独自テーマで、jQuery を使ってモバイル用のハンバーガーメニューを実装したいと考えています。まず静的な HTML や CSS を作成し、jQuery を読み込んだうえで外部 JS ファイルに jQuery で記述すると、ハンバーガーメニューが動作しました。

     functions.php に jQuery の読み込みを記載しています。

    function mytheme_enqueue_scripts() {
        // style.css
        wp_enqueue_style( 'main', get_stylesheet_uri() );
        // FontAwesome
        wp_enqueue_style( 'fontawesome', get_stylesheet_directory_uri() . '/fonts/fontawesome/css/all.min.css' );
        // jQuery
        wp_enqueue_script( 'jquery', get_stylesheet_directory_uri() . '/js/jquery.js' );
        // JavaScript
        wp_enqueue_script( 'main', get_stylesheet_directory_uri() . '/js/script.js' );
     }
    add_action( 'wp_enqueue_scripts', 'aizome_enqueue_scripts' );

     一時$ is not a functionなどのエラーが Web ブラウザーのコンソールに表示されていましたが、この質問を書いている時点(2023年5月6日11時08分)では、「jquery-migrate.min.js?ver=3.4.0:2 JQMIGRATE: Migrate is installed, version 3.4.0」という情報と、Uncaught TypeError: $ is not a function at script.js?ver=6.2:22:1(エラーが表示されています。

    nav.js(静的 HTML ファイルに組み込んだ JavaScript ファイル):

    $('#hamburger-icon').on('click', function(){
        console.log('メニューを開きます。');
        $('.nav-list').toggleClass('sp-menu-active');
        $('#hamburger-icon').toggleClass('fa-bars fa-xmark');
    });
    $('#hamburger-icon').on('click', function(){
        console.log('メニューを開きます。');
        $('.nav-list').toggleClass('sp-menu-active');
        $('#hamburger-icon').toggleClass('fa-bars fa-xmark');
    });

    $jQuery に書き換えると、コンソールに「Uncaught TypeError: $ is not a function at script.js?ver=6.2:22:1(」は表示されなくなりました。

    jQuery('#hamburger-icon').on('click', function(){
        console.log('メニューを開きます。');
        jQuery('.nav-list').toggleClass('sp-menu-active');
        jQuery('#hamburger-icon').toggleClass('fa-bars fa-xmark');
    });

     これらのコードを WordPress のテンプレートにコピーし、テーマ用に編集を加えると、同じ JavaScript コードでも WordPress ではアイコンをクリックしても動作しません。どうすれば良いでしょうか?ご教示いただければ幸いです。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック投稿者 KonpeitoRO

    (@konpeitowp)

     開発は Windows の「Local」で行っています。XAMPP やレンタルサーバーにコピーしても同じく jQuery が動作しませんでしたが、以下のように他のコードでも jQuery 不使用の JavaScript は WordPress でも動作しました。

    WordPress で動作する:

    document.getElementById('js-btn').onclick = function(){
        document.getElementById('js-text').textContent = 'こんにちは';
    };

    動作しない(jQuery):

    jQuery('#js-btn').click.on('click', function(){
        jQuery('#js-text').text('成功しました。');
    });

     よろしくお願いします。

    WordPressのjQueryライブラリよりも先に、追加するjQueryが読み込まれているのが原因かと思われます。以下のようにコードを変更して、依存関係をただせば(WordPressのjQueryライブラリの後に追加したjQueryを読み込むようにすれば)、各コードに問題がなければ動作するのではないでしょうか?

    • 「jquery」というハンドル名は他と重複するといけないので「my-jquery」に変更しています
    • 依存関係を明らかにするために、array(‘jquery’)という引数を追加しています
    // jQuery
        wp_enqueue_script( 'my-jquery', get_stylesheet_directory_uri() . '/js/jquery.js',array('jquery') );

    • この返信は11ヶ月、 3週前にhimaartjpが編集しました。
    トピック投稿者 KonpeitoRO

    (@konpeitowp)

    @himaartwp さん

     ご回答いただきありがとうございます。

     返信に記載されているように、

     function mytheme_enqueue_scripts() {
        // style.css
        wp_enqueue_style( 'main', get_stylesheet_uri() );
        // FontAwesome
        wp_enqueue_style( 'fontawesome', get_stylesheet_directory_uri() . '/fonts/fontawesome/css/all.min.css' );
        // jQuery ライブラリ
        wp_enqueue_script( 'my-jquery', get_stylesheet_directory_uri() . '/js/jquery.js',array('jquery') );
        // 自分で書いた JavaScript
        wp_enqueue_script( 'main', get_stylesheet_directory_uri() . '/js/script.js', array( 'jquery' ), '', true );
     }
    add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_scripts' );

     上記のようにfunctions.phpを変更しましたが、jQuery を使用して以下のコードを書くと、

    jQuery('#js-btn').click.on('click', function(){
        jQuery('#js-text').text('成功しました。');
    });

     Web ブラウザーのコンソールには 

    Uncaught  TypeError: jQuery(...).click.on is not a function
        at script.js?ver=6.2:41:25
    (

    と表示されスクリプトが動作しませんでした。

     そもそも、jQuery は WordPress に同梱されているとのことなので自分で別途 jQuery のライブラリ本体を読み込む必要はないのでしょうか?

     私はまだ最近 JavaScript を学び始めたばかりですが、よろしくお願いします。

    エラーに出ている通り、click.onという命令は使えませんよ!と言われています(読み込みは正しく行われていると思われます)

    クリックした際のアクションのようですので、以下のようにしたら動作すると思います(これ以上はWordPressの問題ではなく自身で書かれているjQueryやそれで制御される個所の問題ですのでご自身で調べてください)

    jQuery('#js-btn').click(function(){
        jQuery('#js-text').text('成功しました。');
    });

    また、WordPressのjQueryライブラリを使わないのであれば、

    • 書いたjQueryのファイルが読み込まれる前に外部ライブラリを読み込む必要がある
    • 接頭辞にしたjQueryの代わりに$を使う

    等の措置が必要になるでしょう。

    トピック投稿者 KonpeitoRO

    (@konpeitowp)

     WordPress の問題ではないということをアドバイスいただきありがとうございます。もう少し JavaScript や jQuery について学習しようと思います。  

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「テーマの jQuery が動作しない」には新たに返信することはできません。