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

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

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

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

Q&A

解決済

3回答

3643閲覧

jQuery:クッキーにclassを保持したい

aurized

総合スコア14

jQuery

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

1グッド

0クリップ

投稿2016/07/06 03:29

編集2016/07/09 06:56

文字サイズ変更で、jQueryとクッキー用のプラグインを読み込んで利用しているのですが、それに付随してclassも保持できないかなと思っています。
このclassを利用して別のHTML要素を触りたいなと思っています。

下記のコードでは、(ページ遷移させても)文字サイズ変更は動作していますが、classの付与はうまくいきません。
何かヒントを得られればと思っています。
よろしくお願いいたします。

html

1<link id="css_txt_size" href="txt_normal.css" /> 2 3<dd class="txt_normal"><a href="javascript:switchTxtsize('txt_normal');">標準</a></dd> 4<dd class="txt_big"><a href="javascript:switchTxtsize('txt_big');">大きく</a></dd>

javascript

1$(function(){ 2 if ($.cookie('style01')){ 3 switch($.cookie('style01')){ 4 case 'txt_normal': 5 $('.txt_big').removeClass('txt_big--trigger'); 6 $('#css_txt_size').attr({href:'txt_normal.css'}); 7 break; 8 case 'txt_big': 9 $('.txt_big').addClass('txt_big--trigger'); 10 $('#css_txt_size').attr({href:'txt_big.css'}); 11 break; 12 } 13 } 14}); 15 16function switchTxtsize(cssname){ 17 var cssurl= cssname+'.css'; 18 $('#css_txt_size').attr({href:cssurl}); 19 $.cookie('style01',cssname,{expires:30,path:'/'}); 20}
mondaminZ👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

HTML上に書かれたJS構文から、switchTxtsizeの関数が参照できないせいでした。
function()...で囲われた中で定義された関数・変数は、スコープの関係で参照できません。
一旦下記で動作しましたが、JS上でイベントの関連付けをする形に改めた方が良いかもしれません。

html

1<!-- switchTxtsizeを実行しようとしても、参照できない --> 2<a href="javascript:switchTxtsize('txt_normal');">

javascript

1$(function(){ 2 if ($.cookie('style01')){ 3 switch($.cookie('style01')){ 4 case 'txt_normal': 5 $('.txt_big').removeClass('txt_big--trigger'); 6 $('#css_txt_size').attr({href:'txt_normal.css'}); 7 break; 8 case 'txt_big': 9 $('.txt_big').addClass('txt_big--trigger'); 10 $('#css_txt_size').attr({href:'txt_big.css'}); 11 break; 12 } 13 } 14 15 // この領域に定義されている変数・関数は外部から参照不可能 16}); 17 18// 外に出す 19function switchTxtsize(cssname){ 20 var cssurl= cssname+'.css'; 21 $('#css_txt_size').attr({href:cssurl}); 22 $.cookie('style01',cssname,{expires:30,path:'/'}); 23};

投稿2016/07/07 07:48

編集2016/07/07 07:54
yamato_hikawa

総合スコア2092

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

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

aurized

2016/07/09 06:57 編集

コメントありがとうございます。 私の質問のソースが記述ミスで、実際はいただいたソースのように`function()`は`$(function()`の外に記述しておりました。(質問のソースを後ほど修正いたします) その折に、文字サイズ変更自体は動作しておりますが、class付与が動作しないんですよね…。 「JS上でイベントの関連付けをする形」というのはどういう形でしょう。 よろしければヒントをいただければと思います…。
yamato_hikawa

2016/07/10 10:40 編集

上記修正で、ロード時にクラスが付加されるようになりました。 遷移後のページにクラス付与の動作をさせるこの関数の記述がない、とかではないですよね?
yamato_hikawa

2016/07/10 10:51

現状のJSに書かれている動作をまとめます。 ⚫︎ロード時 ・クッキーの有無をしらべる ・クッキーにstyle01の値が設定されている場合、「大きく」の文字にクラスを付与、または外す動作をさせる。さらに特定のCSSを設定する。 ⚫︎ボタンクリック時 ・特定のCSSを設定する ・クッキーに値を保存する 上記以外の動作は書かれていません。 ロード時、クリック時にそれぞれ、何か本当はさせたい動作が抜けていませんか?
aurized

2016/07/11 07:33

再度のコメントありがとうございます。解決できました! `$(function()` の箇所に追記して、欲しい動作が得られました。 ```javascript $(function(){ if ($.cookie('style01')){ switch($.cookie('style01')){ case 'txt_normal': $('.txt_big').removeClass('txt_big--trigger'); $('#css_txt_size').attr({href:'txt_normal.css'}); break; case 'txt_big': $('.txt_big').addClass('txt_big--trigger'); $('#css_txt_size').attr({href:'txt_big.css'}); break; } } $('.txt_big').on('click',function(){ $('.txt_big').addClass('txt_big--trigger'); }); $('.txt_normal').on('click',function(){ $('.txt_big').removeClass('txt_big--trigger'); }); }); ``` > 遷移後のページにクラス付与の動作をさせるこの関数の記述がない、とかではないですよね? > ロード時、クリック時にそれぞれ、何か本当はさせたい動作が抜けていませんか? これらご指摘の記述が抜けていたということですよね…。 また、ロード時とボタンクリック時のご説明もありがとうございます。 どうも私は特にクッキーの使い方が分かっていないようです。 勉強になりました。ありがとうございました。
guest

0

CSSファイルを切り替えているならclassを付け替える意味がないと思いますが?

投稿2016/07/06 03:53

yambejp

総合スコア114829

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

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

aurized

2016/07/06 03:59

コメントありがとうございます。 文字サイズ変更とは別に、classキッカケで他のhtml要素をいじりたいなと思っています。
guest

0

jquery-cookieプラグインですよね。
「不安定」ということは、ちゃんと読み込んでから動作していない、というような感じです。
jqueryを読み込んでから、プラグインを読み込んでますよね?

また、

javascript

1$(function(){ 2console.log(document.cookie); 3 if ($.cookie('style01')){ 4console.log($.cookie('style01'); 5 switch($.cookie('style01')){ 6```ってな感じで追っかけてみたらどうですか? 7または、ブレークポイントを置いてみるとか。

投稿2016/07/06 03:42

shi_ue

総合スコア4437

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

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

aurized

2016/07/06 03:57

コメントありがとうございます。 > jqueryを読み込んでから、プラグインを読み込んでますよね? 文字サイズ変更は動作していますので、読み込み自体は大丈夫だと思います。
shi_ue

2016/07/06 04:01 編集

いや、違います。 ボタンの動作と、$(function)の動作では違うんです。 あ、でもプラグインだと、jquery読んでないとエラーになるかな・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問