作成中のサイトで、ラジオボタンのクリックで画像を切り替えたいため、こちらのサイトを参考にして以下のように書きました。
html
1<div class="temp-image"> 2 <div class="temp-image-box" id="temp-image-A"> 3 <div class="temp-image-box-top"> 4 <img src="https://placehold.jp/bfbfbf/ffffff/150x150.png?text=%E3%82%AB%E3%83%A9%E3%83%BC%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84" name="lftemp1"> 5 </div> 6 7 <div class="typeA-radio colorradio"> 8 <p class="select-read-text">カラーをお選びください</p> 9 <div class="color-radio-box"> 10 <label class="radio-color-red"> 11 <input type="radio" name="lftemp1" onclick="showimgA1()" value="赤" class="radioreset"> 12 <span>赤</span> 13 </label> 14 <label class="radio-color-blue"> 15 <input type="radio" name="lftemp1" onclick="showimgA2()" value="青" class="radioreset"> 16 <span>青</span> 17 </label> 18 <label class="radio-color-green"> 19 <input type="radio" name="lftemp1" onclick="showimgA3()" value="緑" class="radioreset"> 20 <span>緑</span> 21 </label> 22 <label class="radio-color-pink"><input type="radio" name="lftemp1" onclick="showimgA4()" value="ピンク" class="radioreset"> 23 <span>ピンク</span> 24 </label> 25 <label class="radio-color-orange"><input type="radio" name="lftemp1" onclick="showimgA5()" value="オレンジ" class="radioreset"> 26 <span>オレンジ</span> 27 </label> 28 </div> 29 </div> 30 </div> 31 32 <div class="temp-image-box" id="temp-image-B"> 33 <div class="temp-image-box-top"> 34 <img src="https://placehold.jp/bfbfbf/ffffff/150x150.png?text=%E3%82%AB%E3%83%A9%E3%83%BC%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84" name="lftemp2"> 35 </div> 36 37 <div class="typeB-radio colorradio"> 38 <p class="select-read-text">カラーをお選びください</p> 39 <div class="color-radio-box"> 40 <label class="radio-color-red"><input type="radio" name="lftemp2" onclick="showimgB1()" value="赤" class="radioreset"> 41 <span>赤</span> 42 </label> 43 <label class="radio-color-blue"> 44 <input type="radio" name="lftemp2" onclick="showimgB2()" value="青" class="radioreset"> 45 <span>青</span> 46 </label> 47 <label class="radio-color-green"> 48 <input type="radio" name="lftemp2" onclick="showimgB3()" value="緑" class="radioreset"> 49 <span>緑</span> 50 </label> 51 <label class="radio-color-pink"> 52 <input type="radio" name="lftemp2" onclick="showimgB4()" value="ピンク" class="radioreset"> 53 <span>ピンク</span> 54 </label> 55 <label class="radio-color-orange"> 56 <input type="radio" name="lftemp2" onclick="showimgB5()" value="オレンジ" class="radioreset"> 57 <span>オレンジ</span> 58 </label> 59 </div> 60 </div> 61 </div> 62 63 <div class="temp-image-box" id="temp-image-C"> 64 <div class="temp-image-box-top"> 65 <img src="https://placehold.jp/bfbfbf/ffffff/150x150.png?text=%E3%82%AB%E3%83%A9%E3%83%BC%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84" name="lftemp3"> 66 </div> 67 68 <div class="typeC-radio colorradio"> 69 <p class="select-read-text">カラーをお選びください</p> 70 <div class="color-radio-box"> 71 <label class="radio-color-red"><input type="radio" name="lftemp3" onclick="showimgC1()" value="赤" class="radioreset"> 72 <span>赤</span> 73 </label> 74 <label class="radio-color-blue"> 75 <input type="radio" name="lftemp3" onclick="showimgC2()" value="青" class="radioreset"> 76 <span>青</span> 77 </label> 78 <label class="radio-color-green"> 79 <input type="radio" name="lftemp3" onclick="showimgC3()" value="緑" class="radioreset"> 80 <span>緑</span> 81 </label> 82 <label class="radio-color-pink"> 83 <input type="radio" name="lftemp3" onclick="showimgC4()" value="ピンク" class="radioreset"> 84 <span>ピンク</span> 85 </label> 86 <label class="radio-color-orange"><input type="radio" name="lftemp3" onclick="showimgC5()" value="オレンジ" class="radioreset"> 87 <span>オレンジ</span> 88 </label> 89 </div> 90 </div> 91 </div> 92</div>
JavaScript
1//テンプレートA 2function showimgA1(){ 3 document.lftemp1.src = "https://placehold.jp/e93535/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97A%E8%B5%A4"; 4} 5 6function showimgA2(){ 7 document.lftemp1.src = "https://placehold.jp/4644ca/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97A%E9%9D%92"; 8} 9 10function showimgA3(){ 11 document.lftemp1.src = "https://placehold.jp/44ca6c/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97A%E7%B7%91"; 12} 13 14function showimgA4(){ 15 document.lftemp1.src = "https://placehold.jp/ff9eb6/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97A%E3%83%94%E3%83%B3%E3%82%AF"; 16} 17 18function showimgA5(){ 19 document.lftemp1.src = "https://placehold.jp/ffa052/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97A%E3%82%AA%E3%83%AC%E3%83%B3%E3%82%B8"; 20} 21 22 23//テンプレートB 24function showimgB1(){ 25 document.lftemp2.src = "https://placehold.jp/e93535/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97B%E8%B5%A4"; 26} 27 28function showimgB2(){ 29 document.lftemp2.src = "https://placehold.jp/4644ca/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97B%E9%9D%92"; 30} 31 32function showimgB3(){ 33 document.lftemp2.src = "https://placehold.jp/44ca6c/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97B%E7%B7%91"; 34} 35 36function showimgB4(){ 37 document.lftemp2.src = "https://placehold.jp/ff9eb6/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97B%E3%83%94%E3%83%B3%E3%82%AF"; 38} 39 40function showimgB5(){ 41 document.lftemp2.src = "https://placehold.jp/ffa052/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97B%E3%82%AA%E3%83%AC%E3%83%B3%E3%82%B8"; 42} 43 44//テンプレートC 45function showimgC1(){ 46 document.lftemp3.src = "https://placehold.jp/e93535/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97C%E8%B5%A4"; 47} 48 49function showimgC2(){ 50 document.lftemp3.src = "https://placehold.jp/4644ca/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97C%E9%9D%92"; 51} 52 53function showimgC3(){ 54 document.lftemp3.src = "https://placehold.jp/44ca6c/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97C%E7%B7%91"; 55} 56 57function showimgC4(){ 58 document.lftemp3.src = "https://placehold.jp/ff9eb6/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97C%E3%83%94%E3%83%B3%E3%82%AF"; 59} 60 61function showimgC5(){ 62 document.lftemp3.src = "https://placehold.jp/ffa052/ffffff/150x150.png?text=%E3%82%BF%E3%82%A4%E3%83%97C%E3%82%AA%E3%83%AC%E3%83%B3%E3%82%B8"; 63} 64 65
codepen→ https://codepen.io/fushimi/pen/WNMNmOq
サンプルのコードでは最初の画像は1つで、選択肢も3つなので大して長くは感じませんが、今回の場合最初の時点で画像が3つ、更にそれぞれに選択肢も5つずつあるため、jsのコードが冗長で美しくないものになってしまっていると感じます。こちらをもっとコンパクトに、かつ例えば更に画像が増えた場合などのためにも汎用性が高いコードにしたいのですが、Javascriptへの理解が浅く、どのように書き換えることができるのかも分からない状態です・・・自分ならこうする、など、何かアドバイスいただけると嬉しいです。よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/09 04:53 編集