亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法使用防止默認并仍然接收發布請求?

有沒有辦法使用防止默認并仍然接收發布請求?

慕斯709654 2021-06-01 16:46:20
我正在嘗試在我的后端正確驗證表單數據,并且仍然能夠在我的前端使用 Javascript 編寫的表單驗證獲得良好的用戶體驗。我在前端完成了所有表單驗證,以便獲得我們想要e.PreventDefault()在提交按鈕上使用的效果,以便我們可以向用戶顯示任何輸入錯誤而無需重新加載。問題是當您現在實際填寫表單并單擊提交時,由于 preventDefault 沒有將 POST 請求發送到服務器。完全刪除該行似乎解決了我們的服務器未收到發布請求的問題,但這會導致前端表單驗證完全沒有意義,因為由于刷新頁面而未顯示錯誤消息。Javascript 前端驗證:let btn = document.querySelector('.btn')btn.addEventListener('click', function(e) {    e.preventDefault() // <---- THIS IS THE ISSUE    let firstName = document.querySelector('.firstName').value    let lastName = document.querySelector('.lastName').value    let email = document.querySelector('.email').value    let createPassword = document.querySelector('.createPassword').value    let verifyPassword = document.querySelector('.verifyPassword').value    let firstNameSubmit = false    let lasttNameSubmit = false    let emailSubmit = false    let createPasswordSubmit = false    let verifyPasswordSubmit = false    if (/^\s+$/.test(firstName) || firstName == null || firstName == '') {        document.querySelector('.firstNameError').innerHTML = 'First Name is a required field'        document.querySelector('.firstName').style.borderBottom = '1px solid red'    } else if (!/^\s+$/.test(firstName) || firstName !== null || firstName !== '') {        document.querySelector('.firstNameError').innerHTML = null        document.querySelector('.firstName').style.borderBottom = '1px solid #2ecc71'        firstNameSubmit = true    } if (/^\s+$/.test(lastName) || lastName == null || lastName == '') {        document.querySelector('.lastNameError').innerHTML = 'Last Name is a required field'        document.querySelector('.lastName').style.borderBottom = '1px solid red'    } else if (!/^\s+$/.test(lastName) || lastName !== null || lastName !== '') {        document.querySelector('.lastNameError').innerHTML = null        document.querySelector('.lastName').style.borderBottom = '1px solid #2ecc71'        lasttNameSubmit = true    } 我只是想知道是否有解決前端和后端表單驗證的方法,或者使用 preventDefault 或者我是否需要以不同的方式處理這個概念,如果是這樣,如何?提前致謝!
查看完整描述

2 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

因為它是一個 type="submit" 按鈕,所以 event.preventDefault() 阻止了 "submit" 事件觸發(而 "submit" 事件是將數據發送到后端的原因)。


與其在按鈕上監聽“點擊”事件,我認為最好在表單上監聽“提交”事件。當您單擊 type="submit" 的按鈕時,它將在表單上觸發。


表單現在將成為事件的目標。


let form = document.getElementById('my-form')

form.addEventListener('submit', function(event) {})

因此,在您的函數開始時,您應該能夠通過調用來阻止提交操作


event.preventDefault();

但是,您也可以將表單存儲到局部變量中,因為這是觸發提交事件的元素:


let form = event.target

然后,如果沒有錯誤,您可以在函數結束時觸發表單上的提交:


form.submit()

全部一起:


let form = document.getElementById('my-form')

form.addEventListener('submit', function(event) {

   event.preventDefault()

   let form = event.target

   let errors = false;

   //do all of the error checking here, if there's an error, set errors to true

   if(!errors) {

       form.submit()

   }

})

(可能有更好的方法,但這是我能想到的。此外,通過向每個輸入添加“名稱”屬性而不是查詢每個輸入,獲取所有數據值可能更容易場地)。


查看完整回答
反對 回復 2021-06-03
  • 2 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號