You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

选择日期时自动提交含DateField的Flask-WTF表单

实现日期选择后自动提交Flask-WTF表单(Bootstrap 5)

我用Bootstrap 5和Flask-WTF(Python 3.11)搭建网页,表单里有个日期选择器,目前通过SubmitField提交按钮能正常提交表单,但希望选择日期时自动提交表单,无需点击按钮。

我的Flask-WTF表单类代码:

class DateForm(FlaskForm):
    datum = DateField('Datum', validators=[DataRequired()])
    nurabwmabanz = BooleanField('nur abwesende Mitarbeiter anzeigen')
    submit = SubmitField('Aktualisieren')

对应的HTML代码:

<form method="POST" action="">
    {{ form.hidden_tag() }}
    <a role="button" class="btn btn-outline-info float-start me-1 mt-4 pt-3 pb-3" href="{{ url_for('abwesenheitslistebase') }}">h</a>
    {{ form.submit(class="btn btn-outline-info me-3 float-end mt-4 pt-3 pb-3") }}
    <fieldset class="form-group">
        <div class="form-group col-3">
            {{ form.datum.label(class="form-control-label mt-1 ms-2") }}
            {% if form.datum.errors %}
                {{ form.datum(class="form-control form-control-lg is-invalid") }}
                <div class="invalid-feedback">
                    {% for error in form.datum.errors %}
                        <span>{{ error }}</span>
                    {% endfor %}
                </div>
            {% else %}
                {{ form.datum(class="form-control form-control-lg col-1", value=abwdatum) }}
            {% endif %}
        </div>
    </fieldset>
        <div>
            {{ form.nurabwmabanz(checked=cbnurabwmabanz) }}{{ form.nurabwmabanz.label(class="form-control-label mt-1 ms-2") }}
        </div>
</form>

解决方案

核心思路是给日期输入框添加JavaScript事件监听,在日期选择完成后自动触发表单提交。

1. 给日期输入框添加ID(可选但便于定位)

渲染日期输入框时加上id属性,方便后续JS定位:

{{ form.datum(class="form-control form-control-lg col-1", value=abwdatum, id="datum-picker") }}

2. 添加自动提交的JavaScript代码

在页面的<script>标签中(或表单末尾)插入以下代码:

// 获取日期选择器和表单元素
const datePicker = document.getElementById('datum-picker');
const targetForm = datePicker.closest('form');

// 监听日期变化事件,触发表单提交
datePicker.addEventListener('change', () => {
    targetForm.submit();
});

3. 可选:隐藏或移除提交按钮

如果不需要保留手动提交按钮,可直接删除{{ form.submit(...) }}这一行,或用Bootstrap的d-none类隐藏:

{{ form.submit(class="btn btn-outline-info me-3 float-end mt-4 pt-3 pb-3 d-none") }}

额外优化:复选框也自动提交(可选)

如果希望勾选nurabwmabanz复选框时也自动提交,可补充以下JS代码:

const checkbox = document.querySelector('input[name="nurabwmabanz"]');
checkbox.addEventListener('change', () => {
    targetForm.submit();
});

内容的提问来源于stack exchange,提问作者Erbs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:43:38