<form id="form" name="form">
<input type="checkbox" value="1" name="Asthma" data-form-field="Option" class="form-check-input display-7" id="checkbox1" title="Check if Student have Asthma">
<input type="checkbox" value="1" name="Congenital" data-form-field="Option" class="form-check-input display-7" id="checkbox1" title="Check if Student have Congenital Anomalies">
<input type="checkbox" value="1" name="Contact" data-form-field="Option" class="form-check-input display-7" id="checkbox1" title="Check if Student use Contact lens">
</form>我的html中有这个代码
<script type="text/javascript">
// when page is ready
$(document).ready(function() {
// on form submit
$("#form").on('submit', function() {
// to each unchecked checkbox
$(this + 'input[type=checkbox]:not(:checked)').each(function () {
// set value 0 and check it
$(this).attr('checked', true).val(0);
});
})
})
</script>我的问题是,每次我将结果保存到数据库中时,结果总是自动的,即使我没有选中html中的复选框(NO)。我不知道我的javascript做得对不对
这是我的views.py
Asthma = request.POST['Asthma']
Congenital = request.POST['Congenital']
Contact = request.POST['Contact']
V_insert_data = StudentUserMedicalRecord(
Asthma=Asthma,
CongenitalAnomalies=Congenital,
ContactLenses=Contact
)
V_insert_data.save()models.py
Asthma=models.BooleanField(null=True, blank=True, default=False)
CongenitalAnomalies=models.BooleanField(null=True,blank=True, default=False)
ContactLenses=models.BooleanField(null=True,blank=True, default=False)html.py

即使我从html中插入记录也未被选中(否),结果总是自动在我的数据库中自动“是”,请您修复我的javascript代码好吗?好像不起作用。

发布于 2019-11-21 06:17:30
删除所有javascript。这是将所有的0转换为1。
Asthma = request.POST.get('Asthma', 0) # 0 not '0'
Congenital = request.POST.get('Congenital', 0) # 0 not '0'
Contact = request.POST.get('Contact', 0) # 0 not '0'而不是这样:
Asthma = request.POST['Asthma']
Congenital = request.POST['Congenital']
Contact = request.POST['Contact']-------------Edit------------------
视图
Asthma = request.POST.get('Asthma', 0) == '1'
Congenital = request.POST.get('Congenital', 0) == '1'
Contact = request.POST.get('Contact', 0) == '1'
V_insert_data = StudentUserMedicalRecord(
Asthma=Asthma,
CongenitalAnomalies=Congenital,
ContactLenses=Contact
)
V_insert_data.save()模板
<input type="checkbox" value="1" name="Asthma" data-form-field="Option" class="form-check-input display-7" id="checkbox1" title="Check if Student have Asthma">
<input type="checkbox" value="1" name="Congenital" data-form-field="Option" class="form-check-input display-7" id="checkbox2" title="Check if Student have Congenital Anomalies">
<input type="checkbox" value="1" name="Contact" data-form-field="Option" class="form-check-input display-7" id="checkbox3" title="Check if Student use Contact lens">发布于 2019-11-21 21:41:16
摘自本资料来源:类型
同样的问题不仅适用于Joomla项目,也适用于其他使用复选框的web应用程序或网站(特别是粗体部分)。
需要特别注意保存表单中的未选中复选框!!对于组件开发人员来说,这是一个常见的错误,因为他们认为Joomla会处理这个问题。乔姆拉直到现在才知道。( Joomla 2.5仍有问题。) 您可以看到,在保存带有未选中复选框的表单时,POST数据中没有它的变量!因此,很常见的情况是,该值不会被覆盖在您的DB中,特别是如果它已经在表单上表示“选中”(例如1)的值上。
这就是你问题中的JavaScript片段的作用所在。
// when page is ready
$(document).ready(function() {
// on form submit
$("#form").on('submit', function() {
// to each unchecked checkbox
$('input[type=checkbox]:not(:checked)').each(function() {
// set value 0 and check it
$(this).attr('checked', true).val(0);
})
})
})我删除了$(this +部分,因为它破坏了一些东西。
澄清:脚本检查未选中的复选框(以确保有一个复选框正在张贴)。但同时,它将checked状态下的值更改为0 (!)
因此,如果您有未选中的框,它们将表示0,而不是被排除在POST请求数据之外。当您自己选中项时,它将保留它们,并且它将表示为复选框(Es)的POST数据中的值1。
重复的ID也是你需要防止的东西。这是无效的HTML5。
还有以下代码:request.POST['Asthma']
我已经检查并发现它返回了一个QueryDict。在此页面上发现:https://docs.djangoproject.com/en/2.2/ref/request-response/#django.http.QueryDict
该页中的示例:
QueryDict('a=1&a=2&c=3')返回:<QueryDict: {'a': ['1', '2'], 'c': ['3']}>
这意味着,例如,request.POST['Asthma']总是返回一个列表,该列表可能被转换为布尔类型。因此,无论列表中有什么内容,它都可能始终转换为True。
所以当你读到上面写着:
QueryDict.__getitem__(key)¶返回给定键的值。如果键有多个值,则返回最后一个值。
所以最好在这里使用__getitem__(key)或它的别名:
QueryDict.get(key, default=None)¶使用与getitem()相同的逻辑,其中带有一个挂钩,用于在键不存在时返回默认值。
当然,使用JavaScript片段是可以使用的一种方法。但是,如果您更喜欢在Python代码中处理这个问题,您只需像这样使用QueryDict:
Asthma = request.POST.get('Asthma', '0')
发布于 2019-11-13 03:19:14
解决方案
删除Javascript代码。你不需要它。
更多细节
对于这个问题,您并不需要真正理解Javascript。这些评论告诉你正在发生什么,但我将试图澄清:
// when page is ready
$(document).ready(function() {
// on form submit -> This means that this code will run when the form is submitted
$("#form").on('submit', function() {
// to each unchecked checkbox -> This means that each checkbox not checked, will run this code below
$(this + 'input[type=checkbox]:not(:checked)').each(function () {
// set value 0 and check it -> This means that
$(this).attr('checked', true).val(0);
});
})
})如果您想更多地了解它,这段代码使用的是jQuery和函数每一个 (用于循环元素)和属性函数(用于修改HTML元素的属性)。
https://stackoverflow.com/questions/58829631
复制相似问题