一、获取表单元素
在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/n/331643.html
 
 微信扫一扫
微信扫一扫  支付宝扫一扫
支付宝扫一扫 