お世話になっております。
当方Laravel5.5にてWebSiteを構築しております、
環境はmac OS Mojave10.14.2
ブラウザはGoogle Chrome バージョン: 71.0.3578.98になります。
質問内容
下記のエラーが出現して困っています。
(特定のクラスを全てvisibleもしくはhiddenにしたいです)
どこが誤っていますでしょうか?
尚、エラーではクラス「visible_check」に関してエラーが出ていて、
このクラスはviewには1つしかありませんが、
この後
javascript
1 document.getElementsByClassName("."+(i+1)"_"+old[i-1]).style.visibility ="visible";
の部分で、viewに複数箇所あるクラスに対してvisibleを設定しようと考えています。
(ループしている理由は、最下部背景の通り、階層のold値からvisible/hiddenを設定したいからです)
なので、タイトルは「特定のクラスを持つselect option を全て非表示にしたい」としております。
エラー内容
Uncaught TypeError: Cannot set property 'visibility' of undefined
javascript
1if(old){ 2 var old_count_hierarchy = old.length; 3 for( var i=1; i<=old_count_hierarchy; i++){ 4 5 //エラー箇所 6 document.getElementsByClassName('.visible_check').style.visibility ="hidden"; 7 8 document.getElementsByClassName("."+(i+1)"_"+old[i-1]).style.visibility ="visible"; 9 document.getElementById('hierarchy_'+i+'_block').style.display ="block"; 10 11 } 12 ;} 13 14;}
view
html
1 <select name='category_path[]' class='list {{$filterSelect}}' {{$target}} id={{$hierarchy}} {{$empty}}> 2 @foreach($items->category_hierarchized[$key1] as $key2 => $val2) 3 @if(old('category_path') === null) 4 <?php $selected = ""; ?> 5 @else` 6 //old値に基づいてoptionにselectedをつける 7 @if(array_search($items->category_hierarchized[$key1][$key2]['category_id'],old('category_path')) !== false) 8 <?php $selected = "selected"; ?> 9 @else 10 <?php $selected = ""; ?> 11 @endif 12 @endif 13 14 15//hidden・visibleの制御をかけたい箇所 16 <option class="visible_check {{$key1}}_{{$val2['data-belongsto']}}" value="{{$items->category_hierarchized[$key1][$key2]['category_id']}}" 17 data-reference="{{$items->category_hierarchized[$key1][$key2]['category_id']}}" 18 data-belongsto="{{$val2['data-belongsto']}}" 19 onclick="visible_handling({{$key1}},{{$items->category_hierarchized[$key1][$key2]['category_id']}})" {{$disabled}} {{$selected}}> 20 21 22 {{$items->category_hierarchized[$key1][$key2]['category_name']}} 23 </option> 24 @endforeach 25 </select> 26 27
以下、本件の背景です。
実装しているもの
・今実装している画面には全選択肢が全て見えているセレクトボックスが5つあります。
・セレクトボックスはcascadingで、第一階層のセレクトボックスを選択すると、
それに合わせて第二階層のセレクトボックスとその内容が出現し、選択できるというようになっています。
・各セレクトボックスはview側でforeachを回して全て選択肢やセレクトボックスを用意しています。
<セレクトボックスの出現制御>
javascriptによるdisplay制御で、見える見えないの制御をしています。
(例えば、第一階層までしか選択していない時は、display制御で第三階層を見せていない
だけで、view側にはある)
<選択肢の出現制御>
・セレクトボックスの選択肢(option)のvalueには一意の番号が振ってあります
・各セレクトボックスの選択肢(option)は、親の番号を持っているので、
最初の階層で選択された選択肢の番号に応じて、次の階層で選択肢を変更します
<参考>
下記のデモは構築中のものと非常に似ていて、
3階層が常に見えていますが、
1階層目を選択すると2階層目が見えて…のようになる違いがあります。
(選択肢の見え方・制御は同じです)
https://www.jqueryscript.net/demo/jQuery-Plugin-To-Create-Dependent-Select-Boxes-Filter-Select/
やりたいこと
この上で、入力画面から次の画面に
行き、戻るボタンから戻ってきた際に、
optionのold値にある値から、
入力画面で入力したときと同じように画面を
再現すべく、当質問に至りました。
宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/25 07:03
2019/03/25 07:08 編集
2019/03/26 12:02