Bar*_*Bar 4 jquery jinja2 flask flask-wtforms
我正在尝试根据表单另一部分中复选框的状态显示或隐藏表单字段。我认为我可以相对轻松地使用 jQuery .show() 或 .hide() 做到这一点,但到目前为止我运气不佳。有什么想法吗?
表单类:
class MyForm(Form):
checked = BooleanField('Check this box:')
date = DateField('Date:', format='%Y-%m-%d', id="dates")
submit = SubmitField('Submit')
Run Code Online (Sandbox Code Playgroud)
模板:
{% import "bootstrap/wtf.html" as wtf %}
{% block content %}
{{ form.hidden_tag() }}
{{ wtf.form_field(form.checked) }}
{{ wtf.form_field(form.date) }}
{{ wtf.form_field(form.submit) }}
{% endblock %}
{% block scripts %}
<script type="text/javascript">
jQuery(document).ready(function() {
$("#checked").change(function() {
if(this.checked) {
$('#dates').show();
} else {
$('#dates').hide();
}
});
});
</script>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
看起来您正在使用Flask-Bootstrap。
首先,确保您包含{% extends 'bootstrap/base.html' %}
在您的模板中。如果没有该行,您将失去 Flask-Bootstrap 包含在模板中的所有内容,例如 jQuery。
其次,您正在覆盖scripts
块。这就是 Flask-Bootstrap 包含 jQuery 的地方。为了在不丢失基础版本的情况下放置您自己的东西,您需要使用Jinja 的super
功能。它将包括父模板的scripts
块以及您自己的块。
进行这些更改后,您的模板应该看起来像
{% extends 'bootstrap/base.html' %}
{% import "bootstrap/wtf.html" as wtf %}
{% block content %}
<form>
{{ form.hidden_tag() }}
{{ wtf.form_field(form.checked) }}
{{ wtf.form_field(form.date) }}
{{ wtf.form_field(form.submit) }}
</form>
{% endblock %}
{% block scripts %}
{{ super() }}
<script>
jQuery(document).ready(function() {
$("#checked").change(function() {
if (this.checked) {
$('#dates').show();
} else {
$('#dates').hide();
}
});
});
</script>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4219 次 |
最近记录: |