一、獲取表單元素
在JS中,獲取表單元素可以使用querySelector方法或getElementById方法,這裡我們演示使用querySelector方法獲取表單元素:
<form id="myForm">
<input type="text" name="username">
<input type="password" name="password">
</form>
<script>
const form = document.querySelector('#myForm');
const username = form.querySelector('input[name="username"]');
const password = form.querySelector('input[name="password"]');
</script>
二、表單驗證
在提交表單之前,一般會進行表單驗證,以確保用戶輸入的內容符合規範。這裡我們演示一個簡單的表單驗證示例:
<form id="myForm">
<input type="text" name="username">
<input type="password" name="password">
<button type="submit">提交</button>
</form>
<script>
const form = document.querySelector('#myForm');
const username = form.querySelector('input[name="username"]');
const password = form.querySelector('input[name="password"]');
form.addEventListener('submit', e => {
e.preventDefault(); // 阻止表單默認提交
if (username.value.trim() === '') {
alert('用戶名不能為空');
return;
}
if (password.value.trim() === '') {
alert('密碼不能為空');
return;
}
form.submit(); // 手動提交表單
});
</script>
三、手動提交表單
在表單驗證通過後,可以使用form.submit()方法手動提交表單。注意,手動提交表單時,需要阻止表單默認提交行為,否則表單會被提交兩次。
<form id="myForm">
<input type="text" name="username">
<input type="password" name="password">
<button type="submit">提交</button>
</form>
<script>
const form = document.querySelector('#myForm');
const username = form.querySelector('input[name="username"]');
const password = form.querySelector('input[name="password"]');
form.addEventListener('submit', e => {
e.preventDefault(); // 阻止表單默認提交
if (username.value.trim() === '') {
alert('用戶名不能為空');
return;
}
if (password.value.trim() === '') {
alert('密碼不能為空');
return;
}
form.submit(); // 手動提交表單
});
</script>
四、非同步提交表單
在很多場景下,我們需要通過AJAX方式非同步提交表單。這裡我們演示一個使用fetch API進行非同步提交表單的示例:
<form id="myForm">
<input type="text" name="username">
<input type="password" name="password">
<button type="submit">提交</button>
</form>
<script>
const form = document.querySelector('#myForm');
const username = form.querySelector('input[name="username"]');
const password = form.querySelector('input[name="password"]');
form.addEventListener('submit', e => {
e.preventDefault(); // 阻止表單默認提交
if (username.value.trim() === '') {
alert('用戶名不能為空');
return;
}
if (password.value.trim() === '') {
alert('密碼不能為空');
return;
}
fetch('/api/submit', {
method: 'POST',
body: new FormData(form)
})
.then(response => response.json())
.then(data => {
// 處理響應數據
})
.catch(error => {
console.error(error);
});
});
</script>
五、文件上傳
在表單中有文件上傳的情況下,需要設置form的enctype屬性為multipart/form-data,並將文件數據追加到FormData對象中:
<form id="myForm" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">提交</button>
</form>
<script>
const form = document.querySelector('#myForm');
const fileInput = form.querySelector('input[name="file"]');
form.addEventListener('submit', e => {
e.preventDefault(); // 阻止表單默認提交
const formData = new FormData(form);
formData.append('file', fileInput.files[0]);
fetch('/api/upload', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
// 處理響應數據
})
.catch(error => {
console.error(error);
});
});
</script>
原創文章,作者:RBRHK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/331643.html
微信掃一掃
支付寶掃一掃