3 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
從 HTML 中的元素onsubmit中刪除該屬性。<form>嘗試在 JavaScript 中使用addEventListener來監(jiān)聽事件。
如果我們使用該cardCheck函數(shù)作為事件的回調(diào)submit,我們可以在函數(shù)內(nèi)部控制事件將發(fā)生的情況。使用event.preventDefault將阻止表單提交。event.preventDefault例如,當(dāng)您在click事件中使用時(shí),它將阻止默認(rèn)的單擊行為。所以現(xiàn)在表單不會(huì)提交,您可以給它您想要的行為。
我已將您的嵌套 if 語句修改為不需要嵌套的結(jié)構(gòu)。在我看來,這更具可讀性。關(guān)鍵字return在此至關(guān)重要。每當(dāng)一個(gè)if語句為真時(shí),該函數(shù)就會(huì)停止。僅當(dāng)所有if語句的結(jié)果均為 false(這意味著所有輸入都正確)時(shí),用戶才會(huì)被路由到下一頁。
var form = document.querySelector('form[name="form1"]');
form.addEventListener('submit', cardCheck);
function cardCheck(event)
{
// Don't execute the default submit behavior.
event.preventDefault();
var enteredCardNo = document.getElementById("creditCard").value;
var cardNo = /^(?:5[1-5][0-9]{14})$/;
var mon = document.getElementById("month");
var monthSelectedValue = mon.options[mon.selectedIndex].value;
var year = document.getElementById("year");
var yearSelectedValue = year.options[year.selectedIndex].value;
var enteredCVV = document.getElementById("cvv").value;
if (!enteredCardNo.match(cardNo)) {
alert("Not a valid Mastercard number!");
return;
}
if (monthSelectedValue === "month") {
alert("Please select a month");
return;
}
if (yearSelectedValue === "year") {
alert("Please select a year");
return;
}
if (!(enteredCVV.length > 2 && enteredCVV.length < 5)) {
alert("Please input a correct CVV");
return;
}
window.location.href = "secondpage.php";
}

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
解決此問題的一種方法是僅使用 onsubmit。
從“繼續(xù)(提交)”按鈕中刪除 onclick
<button type="submit" id="submit-button">Continue</button>
更改表單元素,以便它在提交時(shí)調(diào)用cardCheck,如下所示
<form name="form1" action="secondpage.php" method="post" onsubmit="return cardCheck(document.form1.payment)">
在你的卡內(nèi)檢查是否一切正常返回 true 否則返回 false。同時(shí)刪除submit() 調(diào)用。這是更新后的代碼
function cardCheck()
{
event.preventDefault(); //here you prevent it from being submitted every time
var enteredCardNo = document.getElementById("creditCard").value;
var cardNo = /^(?:5[1-5][0-9]{14})$/;
var mon = document.getElementById("month");
var monthSelectedValue = mon.options[mon.selectedIndex].value;
var year = document.getElementById("year");
var yearSelectedValue = year.options[year.selectedIndex].value;
var enteredCVV = document.getElementById("cvv").value;
if(enteredCardNo.match(cardNo)) {
if(monthSelectedValue != "month") {
if(yearSelectedValue !="year") {
if(enteredCVV.length > 2 && enteredCVV.length < 5) {
return true;
} else {
alert("Please input a correct CVV");
return false;
}
} else {
alert("Please select a year");
return false;
}
} else {
alert("Please select a month");
return false;
}
} else {
alert("Not a valid Mastercard number!");
}
}

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
當(dāng)您使用時(shí)return false,您會(huì)關(guān)閉默認(rèn)的提交行為。然后,您通過更改進(jìn)行簡單的重定向href- 因此表單不會(huì)將數(shù)據(jù)傳遞到第二頁(所有數(shù)據(jù)$_POST都是空的) - 這就是您出現(xiàn)錯(cuò)誤的原因。那么 - 你可以做什么:
將 id 參數(shù)添加到表單中,例如:
<form id="creditCardForm" name="form1" action="secondpage.php" method="post" >
然后在cardCheck函數(shù)中使用preventDefault。它會(huì)阻止表單提交,因此如果數(shù)據(jù)正常,您必須手動(dòng)提交表單:
function cardCheck()
{
event.preventDefault(); //here you prevent it from being submitted every time
var enteredCardNo = document.getElementById("creditCard").value;
var cardNo = /^(?:5[1-5][0-9]{14})$/;
var mon = document.getElementById("month");
var monthSelectedValue = mon.options[mon.selectedIndex].value;
var year = document.getElementById("year");
var yearSelectedValue = year.options[year.selectedIndex].value;
var enteredCVV = document.getElementById("cvv").value;
if(enteredCardNo.match(cardNo)) {
if(monthSelectedValue != "month") {
if(yearSelectedValue !="year") {
if(enteredCVV.length > 2 && enteredCVV.length < 5) {
document.getElementById("creditCardForm").submit(); //here's the form submittion
} else {
alert("Please input a correct CVV");
}
} else {
alert("Please select a year");
}
} else {
alert("Please select a month");
}
} else {
alert("Not a valid Mastercard number!");
}
}
沒有嘗試,但希望它能幫助你解決問題。
- 3 回答
- 0 關(guān)注
- 136 瀏覽
添加回答
舉報(bào)