我有一個這樣結構的表格。
<form id="email_subscription_form" class="form-inline float-right" method="post" action="/my-endpoint/">
<div class="form-group">
<label for="id_email_address" class="d-none">Email Address</label>
<input type="email" id="id_email_address" class="form-control border-0 rounded-0" name="email_address" value="" placeholder="Email Address">
<input type="hidden" name="mailpiece_slug" value="{{ page.settings.email_newsletter_slug }}" />
<input type="hidden" name="event_slug" value="subscribe" />
</div>
</form>
我在檔案底部還有一個腳本。該腳本的重點是在提交表單之前驗證一個recaptcha。這是我的腳本。
<script>
document.getElementById('email_subscription_form').addEventListener('submit', verifyRecaptcha);
function verifyRecaptcha(e) {
e.preventDefault()
return false
}
</script>
根據一些研究,我認為回傳 false 的函式會阻止表單提交。但是,表單仍然提交并到達端點。
我也試過這個:
<form id="email_subscription_form" class="form-inline float-right" method="post" action="/my-endpoint/" onsubmit="return verifyRecaptcha()">
和
<form id="email_subscription_form" class="form-inline float-right" method="post" action="/my-endpoint/" onsbubmit="return false">
但表格仍然提交。
我可以做些什么來阻止表單提交直到驗證?這是一個 Django 專案,所以模板是 Django 模板。
uj5u.com熱心網友回復:
我進行了一些研究,并以形式存在一個引數onsubmit="",您可以在其中呼叫驗證函式,就像您已經擁有的那樣verifyRecaptcha(e)。據我所見,return false部分應該停止表單,也許是因為您沒有使用onsubmit="verifyRecaptcha(e)"表單開始標記。所以直接 onl oad 腳本是行不通的。您的代碼應如下所示:
html:
<form id="email_subscription_form" onsubmit="verifyRecaptcha(e) hljs-attr">form-inline float-right" method="post" action="/my-endpoint/">
<div class="form-group">
<label for="id_email_address" class="d-none">Email Address</label>
<input type="email" id="id_email_address" class="form-control border-0 rounded-0" name="email_address" value="" placeholder="Email Address">
<input type="hidden" name="mailpiece_slug" value="{{ page.settings.email_newsletter_slug }}" />
<input type="hidden" name="event_slug" value="subscribe" />
</div>
</form>
js:
<script>
function verifyRecaptcha(e) {
e.preventDefault()
return false
}
</script>
uj5u.com熱心網友回復:
我強烈建議您研究 django 如何幫助您處理表單:使用表單。
django 的內置表單管理已經處理了所有好東西,例如驗證,并允許您專注于其他事情。此外,您仍然可以像往常一樣添加您的 JS。
請參閱上面的檔案鏈接和以下示例以快速了解:
from django import forms
from django.core.exceptions import ValidationError
class ContactForm(forms.Form):
# Everything as before.
...
def clean_recipients(self):
data = self.cleaned_data['recipients']
if "[email protected]" not in data:
raise ValidationError("You have forgotten about Fred!")
# Always return a value to use as the new cleaned data, even if
# this method didn't change it.
return data
這將檢查“收件人”欄位中是否包含特定的電子郵件。如果不是,它將引發 ValidationError,宣告的文本顯示在表單中相應欄位的下方。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/409946.html
標籤:
上一篇:DjangoRestFramework-loginview無效資料。需要一本字典,但得到了AnonymousUser
