3 回答

TA貢獻1802條經驗 獲得超5個贊
從 HTML 中的元素onsubmit中刪除該屬性。<form>嘗試在 JavaScript 中使用addEventListener來監聽事件。
如果我們使用該cardCheck函數作為事件的回調submit,我們可以在函數內部控制事件將發生的情況。使用event.preventDefault將阻止表單提交。event.preventDefault例如,當您在click事件中使用時,它將阻止默認的單擊行為。所以現在表單不會提交,您可以給它您想要的行為。
我已將您的嵌套 if 語句修改為不需要嵌套的結構。在我看來,這更具可讀性。關鍵字return在此至關重要。每當一個if語句為真時,該函數就會停止。僅當所有if語句的結果均為 false(這意味著所有輸入都正確)時,用戶才會被路由到下一頁。
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貢獻1776條經驗 獲得超12個贊
解決此問題的一種方法是僅使用 onsubmit。
從“繼續(提交)”按鈕中刪除 onclick
<button type="submit" id="submit-button">Continue</button>
更改表單元素,以便它在提交時調用cardCheck,如下所示
<form name="form1" action="secondpage.php" method="post" onsubmit="return cardCheck(document.form1.payment)">
在你的卡內檢查是否一切正常返回 true 否則返回 false。同時刪除submit() 調用。這是更新后的代碼
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貢獻1796條經驗 獲得超10個贊
當您使用時return false,您會關閉默認的提交行為。然后,您通過更改進行簡單的重定向href- 因此表單不會將數據傳遞到第二頁(所有數據$_POST都是空的) - 這就是您出現錯誤的原因。那么 - 你可以做什么:
將 id 參數添加到表單中,例如:
<form id="creditCardForm" name="form1" action="secondpage.php" method="post" >
然后在cardCheck函數中使用preventDefault。它會阻止表單提交,因此如果數據正常,您必須手動提交表單:
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 關注
- 150 瀏覽
添加回答
舉報