我有一个看起来像这样的表格:
<form id="settings" action="{{ url_for("load_settings") }}" method="post">
...
<label for="m_r">Interval 1</label>
<input type="text" name="morn_r" id="m_r">
<label for="d1_e">Enabled</label>
<input type="checkbox" name="d_enabled" id="d1_e" value="off" onclick="toggle_check(this)">
</form>
这是toggle_check
函数:
function toggle_check(check) {
if (check.value=="on") {
check.value="off";
}
else {
check.value="on";
}
}
这是我的Python:
@app.route("/settings", methods=["POST", "GET"])
def load_settings():
if request.method == "POST":
settings = list(request.form.values())
print(settings)
return render_template("settings.html")
如果我将文本输入留空但单击复选框,则将打印以下内容:[..., '', 'on']
现在,如果我也将复选框保留为空,则将打印以下内容:[..., '']
。由于某些原因,它不会添加复选框的值...
我不知道该如何解决。有人可以帮忙吗?
谢谢。
答案 0 :(得分:0)
从this answer开始,HTML 4 recommendation from W3C声明:
复选框(和单选按钮)是可以由用户切换的开/关开关。设置控制元素的选中属性时,开关为“ on”。提交表单后,只有“启用”复选框控件才能成功。
因此,与Flask无关的是,为什么未选中时复选框值不存在。取消选中该复选框时,浏览器不会将该表单输入序列化到请求中。
您可以做的是在模板中给输入一些合理的值:
<input type="checkbox" name="d_enabled" value="on">
然后在Flask处理程序中检查值的存在:
if request.form.get('d_enabled') == 'on':
# checkbox is checked
else:
# checkbox is not checked