js
1$('.set-role-btn').on('click', function(){ 2 const setRole = $('.set-role').val(); 3 // setRole = {"settlor"=>{"generation"=>"1"}, "beneficiary_agent"=>{"generation"=>"4", "beneficiary_id"=>"2"}} 4 5 switch (true) { 6 case setRole.includes('settlor'): 7 $('#trust_roles').children('[value=settlor]').prop('disabled', true); 8 break; 9 case setRole.includes('trustee'): 10 $('#trust_roles').children('[value=settlor]').prop('disabled', true); 11 break; 12 case setRole.includes('beneficiary"'): 13 $('#trust_roles').children('[value=beneficiary]').prop('disabled', true); 14 break; 15 case setRole.includes('agent'): 16 $('#trust_roles').children('[value=beneficiary_agent]').prop('disabled', true); 17 break; 18 default: 19 } 20});
上記のswitch文にてagent
という文字列が確かに存在しており、4つ目のcase文である
js
1setRole.includes('agent'):
を満たしているのに処理が行われません。
js
1console.log(setRole.includes('agent')); 2// true
と出力されていることも確認済みです。
試しにdebugger
をcase文の中に配置してみましたが、処理が止まらなかったため、分岐していないようです。
原因が分かればご教示いただきたいです。
HTMLが無いので想像ですが、他のcase文が先にマッチしているとかないですか?
上記の内容だと、1番目と2番目のcase文はマッチしており、文中の処理が実行されてます。
しかし、4番目だけ動かないんです、、、
それぞれのcaseでbreakしているので最初のcaseにマッチした場合他のcaseは評価されません。だから4番目のcaseにマッチする場合でも、1~3番めのどれかのcaseにマッチした場合4番目は評価も実行もされないということです。4番目のcaseを先頭に移動すると動いたりしませんか?
関係ないけど、なんで四つ目だけ find なのかな?
draq様
> それぞれのcaseでbreakしているので最初のcaseにマッチした場合他のcaseは評価されません
break;はそのcase文の中から抜けるという意味で例え1番目のcaseがtrueでその中のbreak;が実行されても2番目以降のcaseも判定される、ではなかったでしょうか?
また、break;がなければ1番目のcaseがtrueの場合、以降全てのcase文の内容実行されてしまう、という理解だったのですが間違ってますでしょうか?( 試しにbreak;を削除したのですが、そのような挙動になりました )
takasima20様
すみません、こちらはテスト時のものです。修正しました!
回答3件
あなたの回答
tips
プレビュー