各位好我想請問一下我想要用button傳值給Django後台
試了很久好像有反映但是傳過來的都只有None
有沒有辦法能讓value裡面的值一起傳過去~
不知道是否有大神可以指導小弟程式哪裡有寫錯或是有更好的方式謝謝!
以下是我的程式碼
views.py
if request.method == "POST":
cart = request.POST.get('cartname')
print(cart)
HTML
<form action="/cpu/" method="post" id="fileForm"> {% csrf_token %}
<td><button type="button" name="cartname" onclick="cart(this.value)" value="{{ cpu.name }}" >按鈕</button></td>
</form>
Javascript
{% csrf_token %}
<script type="text/javascript">
function cart(value) {
var msg = "是否將加入購物車?\n請確認!";
if (confirm(msg) == true) {
var fileForm = document.getElementById("fileForm");
fileForm.submit();
alert(value)
}
else {
alert("取消")
}
}
</script>
button不是form的欄位。你這樣用post送出的都是空值,並不會帶入button的value。
比較舊的方法是利用一個隱藏欄位送。
<form action="/cpu/" method="post" id="fileForm">
<td>
<button type="button" onclick="cart()" >按鈕</button>
<input type="hidden" value="{{ cpu.name }}" name="cartname" />
</td>
</form>
<script type="text/javascript">
function cart() {
var msg = "是否將加入購物車?\n請確認!";
if (confirm(msg) == true) {
var fileForm = document.getElementById("fileForm");
fileForm.submit();
}
else {
alert("取消")
}
}
</script>
不過現在流行且通用的方法應該是透過ajax或XHR打,鑒於你目前的JS水平我就不寫了。
問題是原po又不是在問.net
謝謝
我現在傳值有正常了,但還是有點小問題
我想請問一下為甚麼我這樣寫在網頁上點取消時
JS只會把for迴圈第一個的value給NO
第二個之後點取消value都不會改成NO
迴圈
{% for cpu in aFilter.qs %}
<tr>
<td>{{ cpu.name }}</td>
<td>{{ cpu.vendor }}</td>
<form method="post"> {% csrf_token %}
<td><button value="{{ cpu.name }}" onclick="cart(this.value)" id="cartid" name="cart_name" >加入購物車</button></td>
</form>
</tr>
{% endfor %}
JS
{% csrf_token %}
<script>
function cart(value) {
var msg = "確定將"+value+"加入購物車?";
if (confirm(msg) == true) {
alert("成功");
}
else{
document.getElementById('cartid').value = 'NO';
alert("取消");
}
}
</script>
id在html裡是唯一的,如果重複只會抓第一個。
然後如果你是要加入購物車,而且你的form是包在table外,送的應該會是整張table裡面的所有隱藏input。
我是建議你先學一點html及js再繼續寫了。MVC類型的框架不會前端是不可能熟的。
可以用Ajax post
.net的話設runat=server
autopostback就好了吧
後端handler button_click事件