我目前有一個表單,其中包含一些變數,例如用戶名、密碼和電子郵件,可將資料發送到 node.js 服務器。在發送資料之前,我會進行一些檢查,例如輸入是否有效以及電子郵件是否已存在于我的檔案中。我的代碼的檢查方面有效,但是我用來檢查的 javascript 函式在打開檔案以檢查重復電子郵件之前回傳。我覺得如果我能以某種方式使 onsubmit 函式異步,那會有所幫助。
這是我的代碼,我檢查重復電子郵件的部分接近尾聲:
<html>
<body>
<form id='form' action="/signup.html" method="POST" onsubmit="return submitIt();">
<div style="text-align:center">
<label for="name">Full Name</label><br>
<input type="text" size="100" id="name" name="name" placeholder="Enter Your Full Name: "><br><br>
<label for="email">Email</label><br>
<input type="text" size="100" id="email" name="email" placeholder="Enter Your Email: "><br><br>
<label for="password">Password</label><br>
<input type="text" size="100" id="password" name="password" placeholder="Enter Your Password: "><br><br>
<button type="submit" id="submit">Submit</button>
</div>
</form>
</body>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
var ret = true;
async function submitIt() {
let name = document.getElementById("name").value;
let email = document.getElementById("email").value;
let password = document.getElementById("password").value;
if (name == "" || name.length < 4) {
document.getElementById("name").value = "";
document.getElementById("name").placeholder = "Please enter a real name";
ret = false;
}
if (email == "" || email.length < 4) {
document.getElementById("email").value = "";
document.getElementById("email").placeholder = "Please enter a real email";
ret = false;
}
if (ret) {
let found = false;
for (let i = 0; i < email.length; i ) {
if (email[i] == '@') {
found = true;
}
}
if (!found) {
document.getElementById("email").value = "";
document.getElementById("email").placeholder = "Please enter a real email";
ret = false;
}
}
if (password.length < 5) {
document.getElementById("password").value = "";
document.getElementById("password").placeholder = "Password must be atleast 5 characters.";
ret = false;
}
await $.ajax({
type:"POST",
url:'/getUsers',
dataType: "text",
success: function(content) {
let contents = content.split('\n');
for (let i = 0; i < contents.length; i = 3) {
if (contents[i] == email) {
document.getElementById("email").value = "";
document.getElementById("email").placeholder = "Email already in use.";
ret = false;
}
}
}
});
return ret;
}
</script>
</head>
</html>
任何幫助將不勝感激!
uj5u.com熱心網友回復:
您是否嘗試過將onSumbmit呼叫從表單移動到按鈕?
const submitButton = document.getElementById(***)
submitButton.addEventListener('click', () => {your code})
另一種方法可能是防止提交表單的默認行為。
async function submitIt(event) {
event.preventDefault;
event.stopImmediatePropagation;
....your code....
}
我現在無法訪問 PC 來檢查它,但提供的解決方案之一應該可以作業。干杯!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490013.html
標籤:javascript 形式 异步
