iT邦幫忙

0

[Django] JavaScript使用button傳值問題

toad 2022-04-04 14:38:332349 瀏覽
  • 分享至 

  • xImage

各位好我想請問一下我想要用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>
toad iT邦新手 5 級 ‧ 2022-04-06 13:48:19 檢舉
.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
froce
iT邦大師 1 級 ‧ 2022-04-04 20:28:32
最佳解答

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水平我就不寫了。

看更多先前的回應...收起先前的回應...
untitled iT邦新手 5 級 ‧ 2022-04-05 10:14:34 檢舉

可以用Ajax post grr
.net的話設runat=server
autopostback就好了吧
後端handler button_click事件

froce iT邦大師 1 級 ‧ 2022-04-06 12:34:03 檢舉

問題是原po又不是在問.net

toad iT邦新手 5 級 ‧ 2022-04-06 13:01:52 檢舉

謝謝
我現在傳值有正常了,但還是有點小問題
我想請問一下為甚麼我這樣寫在網頁上點取消時
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>
froce iT邦大師 1 級 ‧ 2022-04-06 17:40:44 檢舉

id在html裡是唯一的,如果重複只會抓第一個。
然後如果你是要加入購物車,而且你的form是包在table外,送的應該會是整張table裡面的所有隱藏input。

我是建議你先學一點html及js再繼續寫了。MVC類型的框架不會前端是不可能熟的。

0
untitled
iT邦新手 5 級 ‧ 2022-04-05 10:16:53

可以用Ajax post
.net的話設runat=server
autopostback就好了吧
後端handler button_click事件

我要發表回答

立即登入回答