1 回答

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
問題與您如何構(gòu)建它有關(guān)。我會(huì)給你關(guān)于正在發(fā)生的事情和解決方案的建設(shè)性反饋。
你提到
1.
例如,如果用戶重復(fù)單擊一個(gè)最初未選中的復(fù)選框,打印語句將是這樣的:
[15/Jul/2020 16:11:51] "POST /uni/finishAssignment HTTP/1.1" 200 0
True
saving to true
[15/Jul/2020 16:11:52] "POST /uni/finishAssignment HTTP/1.1" 200 0
True
saving to true
這是True因?yàn)檫@<input type="checkbox" onclick='assignmentFinish("True","{{assignment.id}}")'>將調(diào)用ajax值為 的請(qǐng)求True。在views.py它將執(zhí)行以下塊
if status == 'True':
print("saving to true")
assignment.status = True
所以上面顯示的打印行為是完全正常的,因?yàn)檫@個(gè)塊將被重復(fù)執(zhí)行。
2.
但是打印語句應(yīng)該在 true 和 false 之間交替。出現(xiàn)這種情況的原因可能是顯示復(fù)選框的頁面上的信息未更新。
這是正確的,因?yàn)槟鷽]有在任何地方更新復(fù)選框的值,并且您始終假定值是明確的true和false。
解決方案: 要解決此問題,您需要修改您的js函數(shù),使其將作為element第一個(gè)參數(shù)和assignment.id第二個(gè)參數(shù)。在其中,您需要通過使用checkedstatus屬性直接獲取復(fù)選框的值來更新參數(shù)。
<td scope="row" style="text-align: center">
<form>
{% csrf_token %}
{% if assignment.status %}
<input type="checkbox" checked onclick='assignmentFinish(this,"{{assignment.id}}")'>
{% else %}
<input type="checkbox" onclick='assignmentFinish(this,"{{assignment.id}}")'>
{% endif %}
</form>
</td>
function assignmentFinish(element,assignment) {
link = "{% url 'uni:finish-assignment' %}";
$.ajax({
type:'POST',
url: link,
data:{
status: element.checked ,
assignmentID: assignment,
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val()
},
success: function(){
}
});
}
現(xiàn)在您將傳遞復(fù)選框的實(shí)際值,它應(yīng)該按照您期望的方式運(yùn)行。
添加回答
舉報(bào)