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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

2365閲覧

ボタンにカレントクラスを付与したい

erp

総合スコア46

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/01/28 02:30

編集2020/02/02 02:23

javaScriptが分からない

とんでもないレベルの初心者です。JavaScriptに強い方お助けくださいませ。

ボタン押下時にカレントクラスを付与して、結果をクッキーに保存するJavaScriptを書きたいのですが……。
背景・文字色を変更するボタンを押したとき、白背景が適用されているときはそのボタンが凹み、黒適応時は黒ボタンが凹む。デフォルトで白背景が適応され、ボタン押下の結果がクッキーに保存されるjavaScriptを書きたいです。

発生している問題

ボタンにカレント表示は出来るようになりましたが、結果がクッキーに保存されず、選択した背景が維持されません。特に、試したこと2個目のJavaScriptを書き加えると、ボタン自体が効かなくなります。ボタンを押された凹んだ形状、背景の色はページをまたぐと元に戻ってしまいます。

エラー

Uncaught TypeError: Cannot read property 'match' of undefined at HTMLDocument.<anonymous> (jquery.illbenet_novel.js:18)

このエラーが以下に対して出ました。

if ($('#bw_swich').attr('onclick').match(/change2/)) {

ボタンのソースコード

javascript

1<script type="text/javascript"> 2 function change1( newColor, newBgColor, newBgColor, newBgColor , newBgColor, newBgColor) { 3 document.getElementById('main').style.backgroundColor = newColor; 4 document.getElementById('main').style.color = newBgColor; 5 document.getElementById('h3').style.color = newBgColor; 6 document.getElementById('h4').style.color = newBgColor; 7 document.getElementById('honbun_next').style.color = newBgColor; 8 document.getElementById('honbun_prev').style.color = newBgColor; 9 } 10 function change2( newColor, newBgColor, newBgColor , newBgColor , newBgColor, newBgColor) { 11 document.getElementById('main').style.backgroundColor = newColor; 12 document.getElementById('main').style.color = newBgColor; 13 document.getElementById('h3').style.color = newBgColor; 14 document.getElementById('h4').style.color = newBgColor; 15 document.getElementById('honbun_next').style.color = newBgColor; 16 document.getElementById('honbun_prev').style.color = newBgColor; 17 } 18</script>

html

1<div id="main"> 2  <div id="bw_swich"> 3 <input type="button" value="&#xf15c;" onclick="change2('#fff','#212931','#212931','#212931','#212931','#212931');" id="White" class="far"  title="白背景"> 4  <input type="button" value="&#xf15c;" onclick="change1('#000','#fff','#fff','#fff','#fff','#fff');" id="Black" class="fas" title="黒背景"> 5 </div> 6 <div id="novel"> 7 <button id="honbun_next"><i title="次のページへ"></i></button> 8 <div div id="honbun" class="serif middle"> 9 <button id="honbun_prev"><i title="前のページへ"></i></button> 10 </div> 11 </div> 12</div>

htmlにmain要素は記載しています。

css

1#White.current, #Black.current{~~~装飾~~~}

試したこと

自分で書いてみたコードです。

javascript

1   // White設定ボタン押下時にカレントクラスを付与 2 $("#White").click(function () { 3 // ボタンにカレントクラスを付与 4 $("#White").addClass('current'); 5 $("#Black").removeClass('current'); 6 // 7 $('main').remove('change2'); 8 // クッキーに選択結果を登録する 9 Cookies.set('cookieColor', 'change2', { expires: 7 }); 10 return false; 11 }); 12 // Black設定ボタン押下時にカレントクラスを付与 13 $("#Black").click(function () { 14 // ボタンにカレントクラスを付与 15 $("#Black").addClass('current'); 16 $("#White").removeClass('current'); 17 // 18 $('main').remove('change1'); 19 // クッキーに選択結果を登録する 20 Cookies.set('cookieColor', 'change1', { expires: 7 }); 21 return false; 22 });

さらに

javascript

1$(document).ready( 2 function() { 3if (!Cookies.get('cookieColor')) { 4 // クッキー未登録時に診断してカレントクラスを付与 5 if ($('#bw_swich').attr('onclick').match(/change2/)) { 6 $('#White').addClass('current'); 7 $("#honbun").add('change2'); 8 $("#honbun").remove('change1'); 9 } else { 10 $('#Black').addClass('current'); 11 $("#honbun").remove('change2'); 12 $("#honbun").add('change1'); 13 } 14 } else if (Cookies.get('cookieColor') == 'change2') { 15 // クッキー白登録であれば白ボタンにクラス付与 16 $('#White').addClass('current'); 17 $('#Black').removeClass('current'); 18 // 黒クラス付与 19 $("#honbun").add('change2'); 20 $("#honbun").remove('change1'); 21 } else if (Cookies.get('cookieColor') == 'change1') { 22 // クッキー黒登録であれば黒ボタンにクラス付与 23 $('#White').removeClass('current'); 24 $('#Black').addClass('current'); 25 // 白クラス付与 26 $("#honbun").remove('change2'); 27 $("#honbun").add('change1'); 28 } 29} 30);

試したこと二個目のjavascriptが効かなくて困っています。どうかお助けください。お願いいたします。

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

chrome最新版、クッキーはこちらからお借りしました(https://illbenet.jp/view/99)クッキーはhtmlと同ディレクトリに置いています。<script src="./js.cookie.js"></script>のJSはhtmlに記載しています。クッキーの動向はサーバー上でテストページを作って見ています。

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

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

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

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

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

miyabi_takatsuk

2020/01/28 02:36

JavaとJavaScriptは全然違う言語なので、質問文直しましょう。
erp

2020/01/28 02:43

教えてくださりありがとうございます!
miyabi_takatsuk

2020/01/28 02:51

追加ですみません、下記もお願いします。 ・Cookiesは、何かjQueryプラグイン使ってますよね? そのプラグインの名前など(できればURLも)の掲示もお願いします。 ・CSSの掲示がありませんが、そこよりもクラスを付与したいが、できない、って質問でいいですか? また、これ、Blackの方のボタン押した時は動くと思うのですが、Blackもだめですか??
erp

2020/01/28 03:06

コメントありがとうございます。 クッキーはこちらからお借りしました(https://illbenet.jp/view/99) そうですね、クラス付与したいです。 Blackのボタンは動きます! ただカレント付与ができないんです。
miyabi_takatsuk

2020/01/28 07:28 編集

一つ、質問が。 <script src="./js.cookie.js"></script> のJSは、HTML内に入れていますか? そして、上記JSファイルはHTMLと同じ階層のディレクトリに入れておりますか? 上記のようにしないと、Cookie関数は使用することができません。
erp

2020/01/28 07:38

どちらもやっております。 ですが、ボタンを押された凹んだ形状はページをまたいでも記憶されますが、背景の色はページをまたぐと元に戻ってしまいます。
miyabi_takatsuk

2020/01/28 07:41

なるほど。 そこも質問に記載いただかないと第三者にはわかりません。 ので、そこも質問本文に記載ください。(ページを跨ぐと元に戻るってことを) その、"ページを跨ぐと"という情報を元に回答を修正します。
erp

2020/01/28 07:46

了解です!
miyabi_takatsuk

2020/01/28 07:54

最後の質問です。 これでおそらく結論でます。 ローカルのHTMLファイルをダブルクリックで開いて実験してますか??
erp

2020/01/28 08:09

テストページを作ってサーバー上で様子見をしています。他のフォントサイズ変更、字体変更、横書き縦書き変更のボタンはクッキーに保存されています。こちらの背景ボタンだけ効きません。
miyabi_takatsuk

2020/01/28 08:14

ふむ・・・・・・・・・・・ わかりました。もう少しみてみます。
miyabi_takatsuk

2020/01/28 08:18

何度も何度もすみません、 二個目の構文のなかで、 main要素のクラスに、change2があれば、実行となっていますが、 main要素も、HTMLの記載に含めてもらえませんか? そこも原因の一つなような気がします。
miyabi_takatsuk

2020/01/28 08:27

ひとまず、main要素がないと、エラーが発生し、以降の処理(クラスを付与したりなど)は実行されないのはこちらの動作環境では確認できました。 main要素を記載しているかどうかもご確認ください。
erp

2020/01/28 08:46 編集

main要素は記載しています。 「main要素のクラスにchange2があれば実行」というのは、main要素の中に、「ボタンのソースコード」のJavaScriptを書かないといけないということでしょうか? こちらこそ何度もすみません。
miyabi_takatsuk

2020/01/28 08:58

いえ、htmlの中にです。 今、HTMLのコードには、inputしかいないので。 mainも含みで記載していただくと助かります。 あと、もう一つ、デベロッパーツールを使い、何か、JS実行上のエラーがでていれば、それも記載お願いします。
erp

2020/01/28 09:14

了解です。 今出先なので回答は明日の朝以降になります。 デベロッパーツールというのは、コードを編集するソフトの事でしょうか?
miyabi_takatsuk

2020/01/28 09:22

いえ、ブラウザに標準で搭載されている機能です。 Google Chrome デベロッパーツール と検索すれば、使い方がわかります。
guest

回答1

0

各構文のID指定が、小文字スタートになってるからです。
#white#White
です。

プログラムの世界では、大文字小文字は厳密ですので気をつけましょう。

javascript

1 2// White設定ボタン押下時にカレントクラスを付与 3 $("#White").click(function () { 4 // ボタンにカレントクラスを付与 5 $("#White").addClass('current'); 6 $("#Black").removeClass('current'); 7 // 8 $('main').remove('change2'); 9 // クッキーに選択結果を登録する 10 Cookies.set('cookieColor', 'change2', { expires: 7 }); 11 return false; 12 }); 13 // Black設定ボタン押下時にカレントクラスを付与 14 $("#Black").click(function () { 15 // ボタンにカレントクラスを付与 16 $("#Black").addClass('current'); 17 $("#White").removeClass('current'); 18 // 19 $('main').remove('change1'); 20 // クッキーに選択結果を登録する 21 Cookies.set('cookieColor', 'change1', { expires: 7 }); 22 return false; 23 }); 24

クッキーが使えない原因

ローカルで、HTMLを開いているからです。
ローカルでの通常実行の場合、ブラウザのセキュリティに引っかかるため、
クッキーへの保存ができません。(下手すると読み込みもできない)
Google Chromeでは特になのですが、最近のブラウザのセキュリティはかなり強いものになりますので、
様々な機能が制限されます。
よって、下記のいずれかをする必要があります。

  • ローカルファイルHTMLを開く際に、ブラウザをオプション起動し、CORSを回避する
  • XAMPP(Windowsの場合)や、MAMP(macOSの場合)を使い、ローカルサーバーを立てて、httpアクセスでページを開く

上記をやる方法に関しては、本質問要件から逸脱するため、割愛します。
ご自身でやり方を再度調査してください。

以上です。

投稿2020/01/28 03:15

編集2020/01/28 08:02
miyabi_takatsuk

総合スコア9528

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

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

erp

2020/01/28 03:38

試したこと一個目は解決しました。ありがとうございます!!
miyabi_takatsuk

2020/01/28 03:40

ん? 質問文にはそこしか問題の記載ありませんでしたが、まだ問題があるんでしょうか?
miyabi_takatsuk

2020/01/28 03:52 編集

あ、試したこと二個目ってそういうことか・・・。 クッキーが保存されないってことですか? だんなら、そこも明記しておいた方がいいですよ。 teratailは、無料で有志で回答しているサイトなので、要件以上のことはやってもらえない、と考えておいた方がいいです。 (少なくとも私は要件以上のことは回答しないようにしてます) つまり、javascriptが効かないでは、何が起こっているかわからないので明確に起きている問題を明記してほしいってことです。 不明確な内容だったら、タイトルが要件としか判断できません。
erp

2020/01/28 04:32

はい、試したこと二個目のjavascriptが間違っているみたいで、クッキーに保存されません。 なるほど! 勉強になります。
miyabi_takatsuk

2020/01/28 05:05

勉強になったなら、質問本文をしっかり修正してください。 しかも、クッキーに保存されないのは二個目が原因ではありません。 二個目はクッキーを読み込んでいるだけなので、保存は行っていません。 よって、クッキーが保存されないと、なら一個目が原因です。
erp

2020/01/28 07:23

そうだったんですね。質問文修正致しました。ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問