JavaScript 微调器与使用 WTForms 的输入 "required" 属性冲突
JavaScript Spinner is conflicting with The input "required" attribute using WTForms
我正在使用 Flask,并且在登录页面上有一些基本元素。路由、表单和模板。我还有一个在提交表单时触发的微调器。
我 运行 遇到问题的地方是有人没有填写信息,而是点击提交。基本上,会触发微调器,但也会触发警告用户填写字段的信息提示,从而导致微调器卡住旋转。
表格:
class LoginForm(FlaskForm):
email = StringField("Email Address", validators=[DataRequired(), Email()])
password = PasswordField("Password", validators=[DataRequired()])
submit = SubmitField("Login")
路线:
@auth.route("/login", methods=["Get", "Post"])
def login():
form = LoginForm()
if form.validate_on_submit():
# Login to the site
return render_template("login.html", form=form, title="Sign In")
模板:
<form class="text-left col-lg-12" action="" method="POST">
{{ form.hidden_tag() }}
<div class="form-group">
{% if form.email.errors %}
{{ form.email(class_="form-control is-invalid", placeholder="Email") }}
<div class="invalid-feedback">
{% for error in form.email.errors %}
<span> {{ error }} </span>
{% endfor %}
</div>
{% else %}
{{ form.email(class_="form-control ", placeholder="Email") }}
{% endif %}
</div>
<div class="form-group">
{% if form.password.errors %}
{{ form.password(class_="form-control is-invalid", placeholder="Password") }}
<div class="invalid-feedback">
{% for error in form.password.errors %}
<span> {{ error }} </span>
{% endfor %}
</div>
{% else %}
{{ form.password(class_="form-control ", placeholder="Password") }}
<span class="p-viewer"><i class="icon-eye" id="togglePassword" style="margin-left: 100px; cursor: pointer;"></i></span>
{% endif %}
</div>
<div class="text-right mt-3">
<a href="{{ url_for('main.index') }}" class="btn btn-link text-grey"><i class="icon-chevron-left"></i> Homepage </a>
{{ form.submit(class="btn btn-primary", onclick='spinner()') }}
</div>
</form>
JavaScript 微调器:
<script>
function spinner() {
$('#spinner').modal('show');
return true;
}
var FirstLoading = true;
function RestoreSubmitButton() {
if (FirstLoading) {
FirstLoading = false;
return;
}
$('#spinner').modal('hide');
}
document.onfocus = RestoreSubmitButton;
</script>
因为我在表单中使用 DataRequired(),所以它在输入字段中插入了一个“必需”元素。当我在没有数据的情况下单击提交时,它会触发微调器,然后显示信息框:
我的问题是,有没有办法妥善处理这种冲突?或者有没有办法在验证过程完成后将微调器触发到 运行?
谢谢
我只需要在表单而不是按钮上放置一个 id。
所以,我改变了:
<div class="text-right mt-3">
<a href="{{ url_for('main.index') }}" class="btn btn-link text-grey"><i class="icon-chevron-left"></i> Homepage </a>
{{ form.submit(class="btn btn-primary", onclick='spinner()') }}
</div>
至:
<div class="text-right mt-3">
<a href="{{ url_for('main.index') }}" class="btn btn-link text-grey"><i class="icon-chevron-left"></i> Homepage </a>
{{ form.submit(class="btn btn-primary") }}
</div>
和:
<form method="POST" acion="">
至:
<form method="POST" acion="" id="submit_id">
并添加了一点 javascript:
$(document).ready(function() {
$("#submit_id").submit(function(e) {
spinner();
});
});
现在,直到表单本身有机会查看是否需要必填字段后,微调器才会启动
我正在使用 Flask,并且在登录页面上有一些基本元素。路由、表单和模板。我还有一个在提交表单时触发的微调器。
我 运行 遇到问题的地方是有人没有填写信息,而是点击提交。基本上,会触发微调器,但也会触发警告用户填写字段的信息提示,从而导致微调器卡住旋转。
表格:
class LoginForm(FlaskForm):
email = StringField("Email Address", validators=[DataRequired(), Email()])
password = PasswordField("Password", validators=[DataRequired()])
submit = SubmitField("Login")
路线:
@auth.route("/login", methods=["Get", "Post"])
def login():
form = LoginForm()
if form.validate_on_submit():
# Login to the site
return render_template("login.html", form=form, title="Sign In")
模板:
<form class="text-left col-lg-12" action="" method="POST">
{{ form.hidden_tag() }}
<div class="form-group">
{% if form.email.errors %}
{{ form.email(class_="form-control is-invalid", placeholder="Email") }}
<div class="invalid-feedback">
{% for error in form.email.errors %}
<span> {{ error }} </span>
{% endfor %}
</div>
{% else %}
{{ form.email(class_="form-control ", placeholder="Email") }}
{% endif %}
</div>
<div class="form-group">
{% if form.password.errors %}
{{ form.password(class_="form-control is-invalid", placeholder="Password") }}
<div class="invalid-feedback">
{% for error in form.password.errors %}
<span> {{ error }} </span>
{% endfor %}
</div>
{% else %}
{{ form.password(class_="form-control ", placeholder="Password") }}
<span class="p-viewer"><i class="icon-eye" id="togglePassword" style="margin-left: 100px; cursor: pointer;"></i></span>
{% endif %}
</div>
<div class="text-right mt-3">
<a href="{{ url_for('main.index') }}" class="btn btn-link text-grey"><i class="icon-chevron-left"></i> Homepage </a>
{{ form.submit(class="btn btn-primary", onclick='spinner()') }}
</div>
</form>
JavaScript 微调器:
<script>
function spinner() {
$('#spinner').modal('show');
return true;
}
var FirstLoading = true;
function RestoreSubmitButton() {
if (FirstLoading) {
FirstLoading = false;
return;
}
$('#spinner').modal('hide');
}
document.onfocus = RestoreSubmitButton;
</script>
因为我在表单中使用 DataRequired(),所以它在输入字段中插入了一个“必需”元素。当我在没有数据的情况下单击提交时,它会触发微调器,然后显示信息框:
我的问题是,有没有办法妥善处理这种冲突?或者有没有办法在验证过程完成后将微调器触发到 运行?
谢谢
我只需要在表单而不是按钮上放置一个 id。
所以,我改变了:
<div class="text-right mt-3">
<a href="{{ url_for('main.index') }}" class="btn btn-link text-grey"><i class="icon-chevron-left"></i> Homepage </a>
{{ form.submit(class="btn btn-primary", onclick='spinner()') }}
</div>
至:
<div class="text-right mt-3">
<a href="{{ url_for('main.index') }}" class="btn btn-link text-grey"><i class="icon-chevron-left"></i> Homepage </a>
{{ form.submit(class="btn btn-primary") }}
</div>
和:
<form method="POST" acion="">
至:
<form method="POST" acion="" id="submit_id">
并添加了一点 javascript:
$(document).ready(function() {
$("#submit_id").submit(function(e) {
spinner();
});
});
现在,直到表单本身有机会查看是否需要必填字段后,微调器才会启动