代码之家  ›  专栏  ›  技术社区  ›  J P

将复选框值发送到烧瓶

  •  0
  • J P  · 技术社区  · 6 年前

    我有一张这样的表格:

    <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";
          }
        }
    

    这是我的蟒蛇:

    @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 回复  |  直到 6 年前
        1
  •  0
  •   Brad K.    6 年前

    偷窃 this answer ,和 HTML 4 recommendation from W3C 国家:

    复选框(和单选按钮)是用户可以切换的开/关开关。设置控件元素的checked属性时,开关为“on”。提交表单时,只有“打开”复选框控件才能成功。

    所以,这与flask无关,因为当取消选中时,为什么没有复选框值。当复选框未选中时,浏览器不会将表单输入序列化到请求中。

    不过,您可以做的是在模板中给输入一些合理的值:

    <input type="checkbox" name="d_enabled" value="on">
    

    然后在烧瓶处理程序中检查是否存在值:

    if request.form.get('d_enabled') == 'on':
        # checkbox is checked
    else:
        # checkbox is not checked