実現したい事
div
要素にonclick
を設定し、対象のdiv
がクリックされた時に、要素内のテキストを取得し、input text
に反映させたい。
困っている事
サーバーから返ってくるデータの数によってdiv
の要素数が異なるため、事前にid
やonclick
を設定できずにいる。
文章で説明するのがあまり得意じゃないため、リンク先のcodepenを見て頂きたいのですが、hoge2やhoge3をクリックするとhoge1の要素を取得し、処理が実行されてしまうのを意図した動きにしたい。
html
1<div class="div-btn" id="btn1" onclick="func_1()"> 2 <div class="input" id="input1">hoge1</div> 3</div> 4<div class="div-btn" id="btn2" onclick="func_1()"> 5 <div class="input" id="input2">hoge2</div> 6</div> 7<div class="div-btn" id="btn3" onclick="func_1()"> 8 <div class="input" id="input3">hoge3</div> 9</div> 10 11<p>ココにクリックしたdivのinputのバリューが反映される</p> 12<input type="text" class="input" id="res">
js
1function func_1(){ 2 //ココで取得しているgetElementByIdが動的に変わってくれれば解決するはず。 3 let el = document.getElementById( "btn1" ); 4 el.style.background="red"; 5 //ココで取得しているgetElementByIdが動的に変わってくれれば解決するはず。 6 let input = document.getElementById("input1").textContent; 7 document.getElementById("res").value = input; 8}
#追記
kei344さんとhatena19さんからご教示いただいコードを参考に以下のように修正する事で解決しました。
ご教示頂きありがとうございました。
css
1.active { 2 background-color: red; 3}
js
1function func_1(button){ 2 var elements = document.getElementsByClassName("div-btn"); 3 for(i=0;i<elements.length;i++){ 4 elements[i].classList.remove("active"); 5 } 6 button.classList.add("active"); 7 let input = button.firstElementChild.textContent; 8 document.getElementById("res").value = input; 9} 10}
回答3件
あなたの回答
tips
プレビュー