我在Flask中有一個單頁面站點,底部有一個聯繫表單。如何防止瀏覽器跳轉到提交頁面的頂部?我不能使用返回false,因爲沒有真正的JavaScript發生。我正在使用Flask的WTForms。在Flask中使用jQuery:如何防止在表單提交時跳到頁首?
<section id="contact">
<h2 class='contact'>Contact</h2>
{% if success %}
<p>Thanks for your message!</p>
{% else %}
{% for message in form.name.errors %}
<div class="flash">{{ message }}</div>
{% endfor %}
{% for message in form.email.errors %}
<div class="flash">{{ message }}</div>
{% endfor %}
{% for message in form.subject.errors %}
<div class="flash">{{ message }}</div>
{% endfor %}
{% for message in form.message.errors %}
<div class="flash">{{ message }}</div>
{% endfor %}
<form id="contactform" action="{{ url_for('contact') }}" method=post>
{{ form.hidden_tag() }}
## "autofocus=true" is to reload at the form on unsuccessful submission. ##
{{ form.name.label }}
{{ form.name(autofocus=true, placeholder="Jimmy Hoffa")}}
{{ form.email.label }}
{{ form.email(placeholder="[email protected]") }}
{{ form.subject.label }}
{{ form.subject }}
{{ form.message.label }}
{{ form.message }}
{{ form.submit }}
</form>
{% endif %}
</section>
</section>
這是我的forms.py和main.py:
forms.py
from flask.ext.wtf import Form, TextField, TextAreaField, SubmitField, validators, ValidationError
class ContactForm(Form):
name = TextField("Name", [validators.Required("Please enter your name!")])
email = TextField("Email", [validators.Required("Please enter your email!"), validators.Email("Enter a real email!")])
subject = TextField("Subject", [validators.Required("Please enter a subject!")])
message = TextAreaField("Message", [validators.Required("Please enter a message!")])
submit = SubmitField("Send")
main.py
@app.route('/', methods=['GET', 'POST'])
def contact():
form = ContactForm()
if request.method == 'POST':
if form.validate() == False:
flash('All fields are required.')
return render_template('home.html', form=form)
else:
msg = Message(form.subject.data, recipients=['[email protected]'])
msg.body = """
From %s <%s>
%s""" % (form.name.data, form.email.data, form.message.data)
mail.send(msg)
return render_template('home.html', success=True)
elif request.method == 'GET':
return render_template('home.html', form=form)
if __name__=='__main__':
app.run(debug=True)
我想回到render_template(「家.html#contact'),但我不能。
我知道解決方案必須如此簡單,但我不完全是Flask(或jQuery)專家。 此外,我會很高興與成功提交像messenger.js(我也不知道)成功提交警告消息,但我真的只是喜歡它自動重新加載在聯繫人部分。
我也試過
{% if success %}
<script>$.load('/ #contact')</script>
但這並沒有多麼容易。
好吧,現在它正在加載在頁面中間,遠不及接觸部分。自從我刪除了所有額外的jQuery滾動操作後,它仍然在頁面中間加載。我認爲問題的一部分是我用success = True渲染家庭模板,但我不知道現在滾動發生了什麼。 –