亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django:jQuery 觸發表單提交 onchange 復選框并保留重新加載時的值

Django:jQuery 觸發表單提交 onchange 復選框并保留重新加載時的值

泛舟湖上清波郎朗 2023-10-14 16:01:57
當選中一個或多個復選框時hostform,我想觸發表單提交。使用下面的代碼可以成功觸發此操作。但是,頁面會在表單提交時重新加載,從而使任何選中的框立即恢復為未選中狀態。我以為localStorage.input這條線可以解決這個問題,但顯然不是。有什么建議么?HTML:<div class="container-lg">      <!-- section for checkboxes -->      <div class="row justify-content-center">        <div class="col-6">          <h2>Host</h2>          <form id="hostform" class="form-inline" role="form" action="" method="post">            {% csrf_token %}            <input type="checkbox" class="form-control" id="one" name="hm" value="one" onchange="triggerPost('one')">            <label for="one">One</label>            <br>            <input type="checkbox" class="form-control" id="two" name="hm" value="two" onchange="triggerPost('two')">            <label for="two">Two</label>            <br>          </form>        </div>     ....     </div>jQuery:<script>  function triggerPost(idnum) {        $('#hostform').on("submit", function () {      localStorage.input = $("#"+idnum).checked;    });    $('#hostform').submit()  };</script>
查看完整描述

1 回答

?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

有兩種方法可以解決此類問題,通過在 Django 視圖中跟蹤發布的數據,或者使用 ajax 將數據發送到視圖,防止每次發送帖子時重新加載 html 頁面和表單。


1. 跟蹤發布的數據:


在您看來,您應該通過獲取復選框的選中值列表來獲取已發布數據中的復選框狀態,然后將它們作為上下文數據返回。這取決于您的回復的組織方式,但為了簡單起見,我們假設您使用TemplateResponse:


return TemplateResponse(request, 'your.html',{'checked_hms':request.POST.getlist('hm')})

與在 html 中相比,您應該使用條件來檢查值是否存在checked_hms并基于checked向復選框輸入添加值,如下所示:


...

<input type="checkbox" class="form-control" id="one" name="hm" value="one" {% if 'one' in checked_hms %}checked{% endif %} onchange="triggerPost()">

<label for="one">One</label>

<br>

<input type="checkbox" class="form-control" id="two" name="hm" value="two" {% if 'two' in checked_hms %}checked{% endif %} onchange="triggerPost()">

<label for="two">Two</label>

...

2.使用ajax:


您可以使用 ajax 調用以 post 形式發送表單數據,這不會重新加載表單,從而保持復選框狀態完整,如下所示:


<script>

    function triggerPost() {

        $.ajax({

            type: "POST",

            url: $('#hostform').attr('action'),

            data: $('#hostform').serialize()

        });

    };

</script>


查看完整回答
反對 回復 2023-10-14
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號