実現したいこと
javascriptで「チェックが外れたら全てのチェックボックスを活性化する」という挙動を作りたい
発生している問題・エラーメッセージ
ECサイトを製作中です。
注文情報のレコードが並んでいて、お客さんの入金状況を一覧できるページを作っているのですが、
「注文レコードごとに用意されているチェックボックスが押された場合に、押されたレコードと同じcustomer_idを持つ注文以外はチェックできないようにする」という機能をjavascriptで作りました。
ここまでは良かったのですが、「チェックが外れた場合、再度全てのチェックボックスが押せるようになる」
という機能が作れず、押したら押しっぱなしのまま戻らない状態になっています。
getElementBy〇〇.disabled = false;で簡単にできると思っていたのですが、どこに書いても機能せず困っています。
どのような書き方があるかご教授お願いできますでしょうか。
該当のソースコード
jsp
1<c:forEach var="pay" varStatus="loop" items="${payment}"> 2 <form:form modelAttribute="paymentRegistModel" name="info"> 3 <tr class="index"> 4 <td class="th-body"> 5 <input type="checkbox" class="checkbox" name="checkbox" id="chk"></td> 6 <th class="th-body">${pay.new_order_date}</th> 7 <th class="th-body">${pay.customer_name}</th> 8 <th class="th-body">${pay.new_order_id}</th> 9 <th class="th-body cid">${pay.customer_id}</th> 10 <th class="th-body">${pay.total_price}</th> 11 <th hidden class="th-body">${pay.customer_kana}</th> 12 <input type="hidden" id="loop_hidden" value="${loop.index}"> 13 <input type="hidden" id="payment_date" 14 value="${pay.payment_date}"> 15 </tr> 16 </form:form> 17</c:forEach>
javascript
1//チェックが入ったらフォームに表示、チェックが外れたら非表示する 2 3var check = a.childNodes[1].children[0]; //チェックボックス 4 5check.addEventListener('click',function() { 6 7 if (this.checked == true){ 8 9//customer_id(cid)のみを取り出してArray化してforEach文にかける 10//引数にindexを指定する事でindex値を取る→チェックボックスのid(chk)をindex値を付けたものに書き換える事でchkに連番を振る 11 var c_id = document.querySelectorAll(".cid"); 12 var cidRowsArray = Array.from(c_id); 13 14 cidRowsArray.forEach(function(element, index, array) { 15 16 var chkElement = document.querySelector('#chk'); 17 chkElement.setAttribute('id', 'chk' + index); 18 19//チェックボックスのnodeValue(=forEachで順繰りに入れ変わるcustomer_id)とチェックされたcustomer_idを見比べて 20//同じでなかったらそのid(=連番のついたchk)のチェックボックスを選択不可にする 21 if(element.childNodes[0].nodeValue != a.childNodes[9].innerText){ 22 23 document.getElementById("chk" + index).disabled = true; 24 25 }; 26 }); 27 28//各所に値をセットする 29 document.getElementById('tp').value = total_price; 30 document.getElementById('pm').value = total_price; 31 document.getElementById('cn').value = customer_name; 32 document.getElementById('nod').value = order_date; 33 document.getElementById('noi').value = order_id; 34 document.getElementById('ci').value = customer_id; 35 36 }else{ 37 38 document.getElementById('pd').value = null; 39 document.getElementById('tp').value = null; 40 document.getElementById('pm').value = null; 41 document.getElementById('cn').value = null; 42 }; 43});
試したこと
・disabled = false;をname、class、idでやってみた
・if (this.checked == true)文のelseにdisabledを書いてみた
・上記if文にelse if文を追記して書いてみた
・このif文の外に独立したdisabled = false;の文を書いた
回答2件
あなたの回答
tips
プレビュー