質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

3004閲覧

jQuaryで記述されているliveが使用不可となり意図する動作が出来なくなってしまいました。

stag

総合スコア1

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/12/11 02:51

編集2020/12/11 03:27

前提・実現したいこと

jQuaryで記述されているliveが使用不可となり意図する動作が出来なくなってしまいました。
ソースコードをどのように変更すればよいかご教授いただきたいです。
当方プログラミングについて詳しくありませんが、ご指導よろしくお願いいたします。

エラー発生までの経緯
Wordpressにてサイトを運営しています。
サーバー移行によりphpとWPのバージョンが以下のように代わりました。
PHP 5.4.45 → PHP 7.3.25
WordPress 4.7.5 → WordPress 5.6
これにより以下の様なエラーメッセジが出て、
WPで使用しているテーマのjQuaryの動作が不能となってしまいました。

発生している問題・エラーメッセージ

Uncaught TypeError: jQuery(...).live is not a function atu HTMLDocument.<anoymous> (common.js?v=1.0:19) at e (jquery.min.js?ver=3.5.1:2) at t (jquery.min.js?ver=3.5.1:2)

該当のソースコード

HTML

1<div original-title="表示" class="etips menu-toggle menu-toggle-off"> 2Toggle 3</div>

Javascript

1 //Sidebar toggle function1 2 jQuery(".menu-toggle-off").live('click',function () { 3 jQuery(".social-header").css({"visibility":"hidden"}); 4 jQuery('.container').stop().animate({left:'-1050','opacity':'0'},500, function() { 5 jQuery(".container").css({"display":"none"}); 6 }); 7 jQuery(".homemenu").stop().animate({'opacity':'0'},150, function() { 8 jQuery(".mainmenu-navigation").css({"display":"none"}); 9 }); 10 jQuery('.menu-toggle').removeClass('menu-toggle-off'); 11 jQuery('.menu-toggle').addClass('menu-toggle-on'); 12 jQuery('.mcycletextwrap').css({"visibility":"hidden"}); 13 jQuery('.logo').css({"visibility":"hidden"}); 14 jQuery('.background-fill').css({"visibility":"hidden"}); 15 }); 16 17 //Sidebar toggle function2 18 jQuery(".menu-toggle-on").live('click',function () { 19 jQuery(".homemenu").stop().animate({'opacity':'1'},500); 20 jQuery(".mainmenu-navigation").css({"display":"block"}); 21 jQuery('.menu-toggle').removeClass('menu-toggle-on'); 22 jQuery('.menu-toggle').addClass('menu-toggle-off'); 23 jQuery(".container").css({"display":"block"}); 24 jQuery('.container').stop().animate({left:'0','opacity':'1'},500); 25 jQuery('.mcycletextwrap').css({"visibility":"visible"}); 26 jQuery(".social-header").css({"visibility":"visible"}); 27 jQuery(".logo").css({"visibility":"visible"}); 28 jQuery('.background-fill').css({"visibility":"visible"}); 29 });

試したこと

ChromeのConsoleで確認したところ、
liveが使用不可となっていたようなので、liveをonに書き換えましたが、
一度目のクリックでSidebar toggle function1は機能するものの、
二度目のクリックのSidebar toggle function2は機能しませんでした。

2度目のクリックでは何もおらない状態で、
ChromeのConsole上でも何も変化ありませんでした。

補足情報(FW/ツールのバージョンなど)

使用環境
Mac OS バージョン: 10.13.6
Google Chrome バージョン: 87.0.4280.88(Official Build) (x86_64)
PHP 7.3.25
WordPress 5.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2020/12/11 03:06

HTMLも記載いただいたほうがいいかと。 おそらく、 class="menu-toggle-off menu-toggle" と適用させていますよね?
stag

2020/12/11 03:28

ご返答ありがとうございます、該当部分のHTMLを追記いたしました。
miyabi_takatsuk

2020/12/11 03:29

ありがとうございます。 私の回答で原因は間違い無いでしょう。 ご参考下さい。
guest

回答3

0

ベストアンサー

$(セレクタ).live(イベント名, ハンドラ)の書き替えは、$(document).on(セレクタ, イベント名, ハンドラ)のようになります(公式)。

投稿2020/12/11 03:31

編集2020/12/11 03:32
maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stag

2020/12/11 04:01

ありがとうございます、初心者すぎてセレクタ、イベント名、ハンドラが どの部分にあたるのかわからず修正出来ませんでした。 以下のように変更してみましたが、もちろん動きませんでした。 jQuery(".menu-toggle-off").live('click',function () { ↓ $(document).on(".menu-toggle-off", 'click', function ()) {
miyabi_takatsuk

2020/12/11 04:10

横槍失礼します。 書き換えはそれで合っていると思いますが、動作しませんか・・・?
stag

2020/12/11 04:12

ご確認ありがとうございます、動作しませんでした。 consoleで確認するとSyntaxErrorがでていました。
miyabi_takatsuk

2020/12/11 04:14 編集

$(document).on(".menu-toggle-on", 'click', function ()) { のように、-offよりも、-onの方にむしろ必要です。 (-onは最初は存在しないため、ラッパーにイベント付与が必要)
miyabi_takatsuk

2020/12/11 04:16

SyntaxErrorとなると、別の原因(構文エラーなので、何か基本的な書き方が間違っている)なので、 ()や{}の入子構造が間違っている気がします。
miyabi_takatsuk

2020/12/11 04:19

何度もすみません、 $(document).on(".menu-toggle-on", 'click', function ()) { ではなく、 $(document).on(".menu-toggle-on", 'click', function () { ですね。 間に、余計な)が入ってます。
stag

2020/12/11 04:20

$(document).on(".menu-toggle-off", 'click', function () { 閉じカッコ「 ) 」を消すとSyntaxErrorがなくなりましたが、 以下の様にconsoleでは出ており、やはり動作しませんでした。 Uncaught TypeError: $ is not a function at HTMLDocument.<anonymous> (common.js?v=1.0:19)
KazuhiroHatano

2020/12/11 04:22

引数の順番、セレクタとイベント逆じゃないですか?
stag

2020/12/11 04:30

ありがとうございます、以下のように逆にしてみましたが動作しませんでした。 $(document).on('click', ".menu-toggle-on", function () {
KazuhiroHatano

2020/12/11 04:38

$ is not a functionのエラーはjQueryがnoConflictしてると起きるエラーです jQuery(function($){ /*実行したいコード*/ }); のように書いて$をjQueryにしましょう
stag

2020/12/11 04:43

みなさまほんとうにありがとうございます。 以下の様に$をjQueryに書き換えたら出来ました。 jQuery(document).on('click', ".menu-toggle-off", function () { 全くの素人ですみません、勉強になりました。
guest

0

live/bind/delegateはすべてonに集約されています

投稿2020/12/11 03:59

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

liveメソッドと、onメソッドの仕様の違いです。
liveメソッドは、要素が存在しなくとも、イベントを当てられるメソッドのため、
その要素が後に出現した時にも、イベントが発動します。
しかし、onメソッドは、定義時に存在している要素にしかあたりません。
なので、後半の、
jQuery(".menu-toggle-on").liveは、onにすると、空振っている、ということです。

なので、イベント処理を、共通のクラスに当て、(今回の場合は、menu-toggleですね)
存在しているクラスによって(menu-toggle-onか、menu-toggle-off)、処理を反転させる、といった工夫と考え方が必要になります。

投稿2020/12/11 03:13

編集2020/12/11 03:15
miyabi_takatsuk

総合スコア9555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/12/11 03:33

後から増えたときなどのことを考えれば、上の要素にイベントを付ける形のほうがいいかと思います(それがliveの動作ともマッチします)。
miyabi_takatsuk

2020/12/11 03:36

なるほど・・・。 そうですね、挙動変わらないよう書き換えの方が混乱も少なそうですしね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問