You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Bootstrap Validator实现分步标签页表单验证及提交

使用Bootstrap Validator实现多标签页表单分步验证

我来帮你搞定这个多标签页的表单验证需求,结合Bootstrap Validator的特性,我们可以实现分步验证+标签页切换的逻辑,下面是具体的实现方案:

核心思路

  • 页面初始化时,仅显示第一个标签页的内容,其余标签页默认隐藏
  • 点击「下一步」按钮时,先对当前激活标签页内的所有表单元素进行验证,只有验证通过后才切换到下一个标签页
  • 点击「完成」按钮时,先确保所有标签页的表单元素都验证通过,再将表单提交到服务器

完整代码实现

HTML结构

<form id="multiTabForm" method="post">
  <!-- 标签页导航 -->
  <ul class="nav nav-tabs" role="tablist">
    <li class="active"><a href="#tab1" role="tab" data-toggle="tab">基本信息</a></li>
    <li><a href="#tab2" role="tab" data-toggle="tab">详细信息</a></li>
    <li><a href="#tab3" role="tab" data-toggle="tab">确认提交</a></li>
  </ul>

  <!-- 标签页内容 -->
  <div class="tab-content">
    <!-- 第一个标签页 -->
    <div class="tab-pane active" id="tab1">
      <div class="form-group">
        <label for="name">姓名</label>
        <input type="text" class="form-control" id="name" name="name" required>
      </div>
      <div class="form-group">
        <label for="email">邮箱</label>
        <input type="email" class="form-control" id="email" name="email" required>
      </div>
      <button type="button" id="nextToTab2" class="btn btn-primary">下一步</button>
    </div>

    <!-- 第二个标签页 -->
    <div class="tab-pane" id="tab2">
      <div class="form-group">
        <label for="phone">手机号</label>
        <input type="tel" class="form-control" id="phone" name="phone" required>
      </div>
      <div class="form-group">
        <label for="address">地址</label>
        <input type="text" class="form-control" id="address" name="address" required>
      </div>
      <button type="button" id="nextToTab3" class="btn btn-primary">下一步</button>
      <button type="button" id="backToTab1" class="btn btn-default">上一步</button>
    </div>

    <!-- 第三个标签页 -->
    <div class="tab-pane" id="tab3">
      <div class="well">
        <p>请确认以下信息:</p>
        <p><strong>姓名:</strong><span id="confirmName"></span></p>
        <p><strong>邮箱:</strong><span id="confirmEmail"></span></p>
        <p><strong>手机号:</strong><span id="confirmPhone"></span></p>
        <p><strong>地址:</strong><span id="confirmAddress"></span></p>
      </div>
      <button type="submit" id="submitForm" class="btn btn-success">完成提交</button>
      <button type="button" id="backToTab2" class="btn btn-default">上一步</button>
    </div>
  </div>
</form>

JavaScript逻辑

$(document).ready(function() {
  // 初始化Bootstrap Validator
  $('#multiTabForm').bootstrapValidator({
    feedbackIcons: {
      valid: 'glyphicon glyphicon-ok',
      invalid: 'glyphicon glyphicon-remove',
      validating: 'glyphicon glyphicon-refresh'
    },
    fields: {
      name: {
        validators: {
          notEmpty: {
            message: '姓名不能为空'
          }
        }
      },
      email: {
        validators: {
          notEmpty: {
            message: '邮箱不能为空'
          },
          emailAddress: {
            message: '请输入有效的邮箱地址'
          }
        }
      },
      phone: {
        validators: {
          notEmpty: {
            message: '手机号不能为空'
          },
          regexp: {
            regexp: /^1[3-9]\d{9}$/,
            message: '请输入有效的手机号'
          }
        }
      },
      address: {
        validators: {
          notEmpty: {
            message: '地址不能为空'
          }
        }
      }
    }
  });

  var validator = $('#multiTabForm').data('bootstrapValidator');

  // 下一步到第二个标签页
  $('#nextToTab2').on('click', function() {
    // 验证第一个标签页的表单元素
    validator.validateContainer('#tab1');
    if (validator.isValidContainer('#tab1')) {
      // 验证通过,切换到第二个标签页
      $('#tab2').tab('show');
    }
  });

  // 下一步到第三个标签页
  $('#nextToTab3').on('click', function() {
    // 验证第二个标签页的表单元素
    validator.validateContainer('#tab2');
    if (validator.isValidContainer('#tab2')) {
      // 填充确认信息
      $('#confirmName').text($('#name').val());
      $('#confirmEmail').text($('#email').val());
      $('#confirmPhone').text($('#phone').val());
      $('#confirmAddress').text($('#address').val());
      // 切换到第三个标签页
      $('#tab3').tab('show');
    }
  });

  // 上一步按钮逻辑
  $('#backToTab1').on('click', function() {
    $('#tab1').tab('show');
  });
  $('#backToTab2').on('click', function() {
    $('#tab2').tab('show');
  });

  // 提交表单
  $('#multiTabForm').on('success.form.bv', function(e) {
    // 阻止默认提交,这里可以换成你的服务器提交逻辑
    e.preventDefault();
    var $form = $(e.target);
    // 这里可以用ajax提交表单
    $.post('/your-submit-url', $form.serialize(), function(response) {
      // 处理服务器返回的结果
      alert('提交成功!');
    });
  });
});

关键知识点说明

  • 分步验证:使用validator.validateContainer('#tabId')可以针对指定标签页内的表单元素进行验证,validator.isValidContainer('#tabId')判断该区域是否验证通过
  • 标签页切换:通过$('#tabId').tab('show')方法切换标签页,Bootstrap会自动处理导航和内容的激活状态
  • 表单提交:监听success.form.bv事件,在所有验证通过后执行服务器提交逻辑,这里用$.post作为示例,你可以根据实际需求调整

内容的提问来源于stack exchange,提问作者mantelinga r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:10:47