質問内容
Djangoを使用しているんですが、
ajaxを使用してAPIもどきを作成しています。
ボタン1、ボタン2、ボタン3
とそれぞれ押したら通信するというものなのですが、
ボタン2だけ、input[type=hidden]
の値も送りたい や、
ボタン3は、input[type=hidden]
が2つ存在し、どちらも送りたい
ボタン1にはそのinput[type=hidden]
は存在しない
例
html
1<div class="buttons"> 2 <div class="action"> 3 <button>button1</button> 4 </div> 5 <div class="action"> 6 <button>button2</button> 7 <input type="hidden" value="foo" data-name="foo"> 8 </div> 9 <div class="action"> 10 <button>button3</button> 11 <input type="hidden" value="foo" data-name="foo"> 12 <input type="hidden" value="example" data-name="val"> 13 </div> 14</div>
.action input[data-name]
はdata-name
が同一でもvalueは違うことがあります。
また、今回はtype=hidden
にしていますが、text
やnumber
も使用するので、動的に取得する必要があります。
最終的に取得する要素には同一class
を付与して取得します。(例には入れてませんのでお気遣いなく)
その状況でまとめて、
JS
1document.querySelectorAll(".action button").forEach(function(element){ 2 element.addEventListener("click",function(e){ 3 /* if(element.querySelectorAll("input[type=hidden]").length > 0) */ 4 /* 連想配列を作りたい {data-name:value} */ 5 $.ajax({ 6 'url': '{% url "api" %}', 7 'method': 'POST', 8 'data':{ 9 'action':e.dataset.action, 10 'csrfmiddlewaretoken': document.querySelector("input[type=hidden]").value, 11 /* 連想配列があったときだけ挿入 もしくはない場合はダミーの連想配列を送信 */ 12 }, 13//省略
のようにまとめてボタンアクションを作成することはできるでしょうか?
要約すると
.action
内のボタンが押され、
input[type=hidden]
が存在するとき、
ajaxのdata
にその値が存在すればそのデータをまとめて送りたいと言うことです
(実際は送信するデータは同じclassを付与して処理します(type=textとかも送信したいので))
可能であればdata-name
の値とvalue
の値を連想配列のような形にできるとありがたいです(Djangoからその形でアクセスできるかは確認してません)
回答3件
あなたの回答
tips
プレビュー