第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

有沒有辦法使用防止默認(rèn)并仍然接收發(fā)布請求?

有沒有辦法使用防止默認(rèn)并仍然接收發(fā)布請求?

慕斯709654 2021-06-01 16:46:20
我正在嘗試在我的后端正確驗(yàn)證表單數(shù)據(jù),并且仍然能夠在我的前端使用 Javascript 編寫的表單驗(yàn)證獲得良好的用戶體驗(yàn)。我在前端完成了所有表單驗(yàn)證,以便獲得我們想要e.PreventDefault()在提交按鈕上使用的效果,以便我們可以向用戶顯示任何輸入錯誤而無需重新加載。問題是當(dāng)您現(xiàn)在實(shí)際填寫表單并單擊提交時,由于 preventDefault 沒有將 POST 請求發(fā)送到服務(wù)器。完全刪除該行似乎解決了我們的服務(wù)器未收到發(fā)布請求的問題,但這會導(dǎo)致前端表單驗(yàn)證完全沒有意義,因?yàn)橛捎谒⑿马撁娑达@示錯誤消息。Javascript 前端驗(yàn)證: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    } 我只是想知道是否有解決前端和后端表單驗(yàn)證的方法,或者使用 preventDefault 或者我是否需要以不同的方式處理這個概念,如果是這樣,如何?提前致謝!
查看完整描述

2 回答

?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個贊

因?yàn)樗且粋€ type="submit" 按鈕,所以 event.preventDefault() 阻止了 "submit" 事件觸發(fā)(而 "submit" 事件是將數(shù)據(jù)發(fā)送到后端的原因)。


與其在按鈕上監(jiān)聽“點(diǎn)擊”事件,我認(rèn)為最好在表單上監(jiān)聽“提交”事件。當(dāng)您單擊 type="submit" 的按鈕時,它將在表單上觸發(fā)。


表單現(xiàn)在將成為事件的目標(biāo)。


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

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

因此,在您的函數(shù)開始時,您應(yīng)該能夠通過調(diào)用來阻止提交操作


event.preventDefault();

但是,您也可以將表單存儲到局部變量中,因?yàn)檫@是觸發(fā)提交事件的元素:


let form = event.target

然后,如果沒有錯誤,您可以在函數(shù)結(jié)束時觸發(fā)表單上的提交:


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()

   }

})

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


查看完整回答
反對 回復(fù) 2021-06-03
  • 2 回答
  • 0 關(guān)注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號