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

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

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

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

Q&A

解決済

4回答

4497閲覧

switch文の結果を定数に代入したい

paccuman

総合スコア13

JavaScript

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

0グッド

0クリップ

投稿2019/12/12 13:36

編集2019/12/12 14:00

【やりたいこと】
ドロップダウン選択後、クリックイベントで、選択したoptionの値を取得。
optionの値ごとにswitch文で文字列を定数に格納したい。

【確認したことエラー】
クリックイベントで、optionの値取得後、定数部分の即時関数内に値を渡すところまでは確認できてます。
switch 文の引数に直接、文字列でoptionの値を入れると理想通り、定数に代入されます。

しかし、switch 文の引数にoptionValを入れるとエラーになってしまいます。
即時関数内に値は渡せているはずだと思っているのですが、どうすれば、直接文字列を入れたときのように
うまくswitch文を機能させ、constに定数を代入できるか教えていただきたいです。

javascript

1$("button").click(function(){ 2 3 let pageOption = $("#pageList").val(); //選択したoptionの値を代入 4 5 const HOGE = (function(optionVal) { 6 switch (optionVal) { 7 case 'optionvalue1': return 'hoge1'; break; 8 case 'optionvalue2': return 'hoge2'; break; 9 case 'optionvalue3': return 'hoge3'; break; 10 default: alert('エラー'); break; 11 } 12 })(pageOption); 13 14 console.log(HOGE); //ここがundefinedになります。。 15 16 17});//f_button-click END

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

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

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

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

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

shiracamus

2019/12/12 13:39

どのcaseにも該当しなかった可能性は?
paccuman

2019/12/12 14:02

ありがとうございます。 検証してみました。defaultの判定でした。 それに伴い質問文を調整させていただきましたのでご確認いただけますと幸いです m( )m
guest

回答4

0

optionValが'optionvalue1' でも 'optionvalue2' でも 'optionvalue3' でもないなら、エラーが表示されるのは当然では?

javascript

1> const f = function(optionVal) { 2... switch (optionVal) { 3..... case 'optionvalue1': return 'hoge1'; break; 4..... case 'optionvalue2': return 'hoge2'; break; 5..... case 'optionvalue3': return 'hoge3'; break; 6..... default: console.log('エラー'); break; 7..... } 8... }; 9undefined 10> f('optionvalue3'); 11'hoge3' 12> f('hoge'); 13エラー 14undefined

ちなみに、この内容でしたら辞書変換の方が効率いい気がします。

javascript

1> const convert = { 2... optionvalue1: 'hoge1', 3... optionvalue2: 'hoge2', 4... optionvalue3: 'hoge3', 5... }; 6undefined 7> convert["optionvalue3"] 8'hoge3' 9> convert["hoge"] 10undefined

投稿2019/12/12 15:12

編集2019/12/12 15:29
shiracamus

総合スコア5406

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

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

paccuman

2019/12/12 16:57

ありがとうございます。辞書変換…試してみます!! optionValの値は、選択したプルダウンによりますが、文字列でoptionvalue1(3)のいずれかは入っていたんですよね。。 switch文ではなく、console.logやreturn optionValだけで試してみました???? とりあえず、明日もう一度確認してみます。。!
guest

0

そのcaseのどれにも合わなかったときにどうなるか考えてみよう

投稿2019/12/12 13:39

y_waiwai

総合スコア87774

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

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

paccuman

2019/12/12 14:04

ありがとうございます。 検証してみました。defaultの判定でした。 同じ回答文で恐縮ですが、それに伴い質問文を調整させていただきましたのでご確認いただけますと幸いです m( )m
y_waiwai

2019/12/12 14:23

optionValのナカミは何なのか調べてみては
paccuman

2019/12/12 16:53

ありがとうございます。optionValの中身はちゃんとプルダウンで選択した値が入っていたんですよね…。 そこまで確認して、いざswitch文にしてみたときに、エラーになってしまい わからなくなってしまいました。。
guest

0

自己解決

皆様ありがとうございました。無事解決できました。
結論、jsの記述は正常でした。

原因はvalueのダブルクォーテーションの記述ミスでした。
誤:value= ”name_often”
正:value= "name_often"

js内では処理が進んで、見た目も似ていて気付けなかったです。
js以外が原因ですみませんでした。。

皆様のソースコードでわからない箇所を調べながら気づくことができました。
見ていただいた皆様、ありがとうございました!

投稿2019/12/13 12:42

paccuman

総合スコア13

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

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

0

switchの各レベルで処理が一つしか無いなら配列に押し込んだほうが楽ですね
そもそもswitchでreturnするのもフロー的にはあまり好ましくないでしょう
コールバックで取っているのもさほど効率的とは言えません

ざっくりまとめるとこう

javascript

1<script> 2$(function(){ 3 $("button").on('click',function(){ 4 const pageOption = $("#pageList").val(); 5 const HOGES = { 6 'optionvalue1':'hoge1', 7 'optionvalue2':'hoge2', 8 'optionvalue3':'hoge3', 9 } ; 10 if (Object.keys(HOGES).indexOf(pageOption)<0){ 11 alert("エラー"); 12 }else{ 13 console.log(HOGES[pageOption]); 14 } 15 }); 16}); 17</script> 18<select id="pageList"> 19<option value="">--</option> 20<option value="optionvalue1">1</option> 21<option value="optionvalue2">2</option> 22<option value="optionvalue3">3</option> 23</select> 24<button>button</button>

ちょっと手を抜くとこう

javascript

1<script> 2$(function(){ 3 $("button").on('click',function(){ 4 const pageOption = $("#pageList").val(); 5 const HOGES = { 6 'optionvalue1':'hoge1', 7 'optionvalue2':'hoge2', 8 'optionvalue3':'hoge3', 9 } ; 10 const msg=HOGES[pageOption]; 11 (msg || alert("エラー")) && console.log(msg); 12 }); 13}); 14</script> 15<select id="pageList"> 16<option value="">--</option> 17<option value="optionvalue1">1</option> 18<option value="optionvalue2">2</option> 19<option value="optionvalue3">3</option> 20</select> 21<button>button</button>

投稿2019/12/13 01:04

yambejp

総合スコア114843

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問