Bootstrap 表单验证formValidation 实现表单动态验证功能


Posted in Javascript onMay 17, 2017

动态添加input并动态添加新验证方式!

init状态:

Bootstrap 表单验证formValidation 实现表单动态验证功能 

点击“+”后:

Bootstrap 表单验证formValidation 实现表单动态验证功能 

验证后:

Bootstrap 表单验证formValidation 实现表单动态验证功能

知识点:

1 先去官网下载:http://formvalidation.io/

2 导入文件,注意事项我就不多说了在远程验证那篇我已经讲过。

3 用到的关键字:addField、removeField、different

4注意一点就是官网里的例子他们的name是不一样的。我这里比较偷懒。且项目ajax的时候不是用的form表单提交,而是自己并接成json提交,所以x,y的name的名字一样。

好开始:

首先是在html里面必须要有一个 “+” 标记为addPos,然后有一个“-” 标记为“removPos,

<div id="posXY" class=" panel panel-default ">
<!-- 添加-->
                <div class="panel-heading" >设置车库xy坐标</div>
                <div class="addPos form-group">
                  <div class="col-lg-4 col-sm-4 col-xs-4" >
                    <input type="text" class="form-control text-left" name="garageNo" placeholder="停车库" style="min-width: 150px"/>
                  </div>
                  <div class="col-lg-3 col-sm-3 col-xs-3" >
                    <input type="text" class="form-control" name="posX" placeholder="X"/>
                  </div>
                  <div class="col-lg-3 col-sm-3 col-xs-3" >
                    <input type="text" class="form-control" name="posY" placeholder="Y"/>
                  </div>
                  <div class="col-lg-2 col-sm-2 col-xs-2" >
                    <button type="button" class="btn btn-default addButtonPos"><i class="glyphicon glyphicon-plus"></i></button>
                  </div>
                </div>
                <!-- 删除 -->
                <div class="removPos form-group hide" id="posTemplate">
                  <div class="col-lg-4 col-sm-4 col-xs-4" >
                    <input type="text" class="form-control text-left" name="garageNo" placeholder="停车库" style="min-width: 150px"/>
                  </div>
                  <div class="col-lg-3 col-sm-3 col-xs-3" >
                    <input type="text" class="form-control" name="posX" placeholder="X"/>
                  </div>
                  <div class="col-lg-3 col-sm-3 col-xs-3" >
                    <input type="text" class="form-control" name="posY" placeholder="Y"/>
                  </div>
                  <div class="col-lg-2 col-sm-2 col-xs-2" >
                    <button type="button" class="btn btn-default removeButtonPos"><i class="glyphicon glyphicon-minus"></i></button>
                  </div>
                </div>
</div>

然后来个js:

/**
   * pos添加
   * @param $that
   */
  function addButtonPosClick($that){
    var panelId = $that.parents(".topTemplate").attr("id");
    var $form=$('#'+panelId+"form")
//    defaultPanel(panelId)
    var bookIndex=typeObj[panelId]++;
    console.log(panelId,bookIndex)
    var $template = $('#'+panelId+' #posTemplate'),
      $clone =$template
        .clone()
        .removeClass('hide')
        .removeAttr('id')
        .attr('step',bookIndex)
        .insertBefore($template);
    // Update the name attributes
    $clone
      .find('[name="garageNo"]').attr({"step":bookIndex,"name":"garageNo"+bookIndex})
      .click(function(){
        clickBindGarageNo(panelId,bookIndex)
      }).end()
      .find('[name="posX"]').attr("step",bookIndex).end()
      .find('[name="posY"]').attr("step",bookIndex).end()
    // Add new fields
    // Note that we also pass the validator rules for new field as the third parameter
//    $('#defaultForm')
//    gFieldArr.push(panelId+'[' + bookIndex + '].garageNo')
    $form
      .formValidation('addField', "garageNo"+bookIndex, formObj.sameAs(false))
      .formValidation('addField', 'posX', myPosXY)
      .formValidation('addField', 'posY', myPosXY)
  }
 function myFormValidation($form){
//    var $form=$("#"+$panelId+"form")
    $form
        .formValidation({
          framework: 'bootstrap',
          locale: 'zh_CN',
          message: '值无效',
          icon: {
            valid: 'glyphicon glyphicon-ok',
            invalid: 'glyphicon glyphicon-remove',
            validating: 'glyphicon glyphicon-refresh'
          },
          fields:
          {
            myimg:{
              validators: {
                notEmpty: {
                  message: '请选择一个文件上传'
                },
                file: {
                  extension: 'jpeg,jpg,png',
                  type: 'image/jpeg,image/png',
                  maxSize: 1*1024 * 1024,
                  message: '该文件必须为jpeg,jpg,png格式和必须不超过1MB的大小'
                }
              }
            }
          }
        })
        .on('click', '.addButtonPos', function() {
          addButtonPosClick($(this))
        })
        //Remove button click handler
        .on('click', '.removeButtonPos', function() {
          var $that   = $(this)
          var panelId = $that.parents(".topTemplate").attr("id");
//           defaultPanel(panelId)
          var $row = $(this).parents('.form-group'),
              index = $row.attr('step');
//          var myname='[' +index + ']'
          var bookIndex= typeObj[panelId]--;
//          $('#defaultForm')
          $form
                   .formValidation('removeField', $row.find('[name="garageNo'+bookIndex+'"]'))
                   .formValidation('removeField', $row.find('[name="posX"]'))
                   .formValidation('removeField', $row.find('[name="posY"]'))
          // Remove element containing the fields
          $row.remove();
        })

因为我的项目有多个表单提交。但是业务相似所以都用这几个函数

比如说: var form=(“#”+panelId+”form”)用panelId来区分是多个表单。

上面说到x,y的name用的是一样的。但是细心的就会发现garageNo是不一样的名称。后面添加了bookindex,为什么呢。

因为业务需求。同一个表单中的garageNo的值不可以相同。好比如说每一个人的身份号不可以相同但是你和你同桌都可以是女的也都可以18岁。。。。

上面已经很好的使用了关键字removeField和addField

garageNo的值不可以相同。怎么弄呢。请看下面:

var differentValid= function(diffstr){
    var vv={
      validators: {
        different: {
          field: diffstr,
          message: '不能有相同的停车库'
        }
      }
    }
    return vv
  }

当用户输入garageNo的值后:

clickBindGarageNo(panelId,idx){
    $form.formValidation('addField', "garageNo"+idx, differentValid(diffArr.toString()))
      var fv =$form.data('formValidation');
      fv.validate();
}

这个diffArr.toString(),是啥呢。这个是我遍历了所有条目的garageNo的name的字符串例如:有3条条目,idx=1 焦点在1上。那么diffArr=[“garageNo0”,”garageNo2”,]

Bootstrap 表单验证formValidation 实现表单动态验证功能 

注意一个bug:如果用多了input,你会发现有时input不会自动验证。比如说验证日期的时候用了日期插件点击日期回来后input没有验证。

这个时候就需要再手动验证一次。 上面那段代码是 先添加新的验证方式,然后验证整个表单。如果你只是想要验证一个input 请用:

$form.formValidation('revalidateField', "field");

还有一个关于提交的细节:

当我们没有设置提交按钮。比起提交按钮在form表单内。他这个插件是会帮你自动提交。但是你也会发现。如果你提交服务失败。他会自动刷新然后你的页面就变成404页面或其他错误页面。

但是有的时候我们不想他刷新。咋办?

网上好多ajax 提交不刷新的教程。。我比较喜欢用一种就是。我不把提交按钮放在form里面。然后:

$btn.click(function(){
//....
retrun false;
)}

以上所述是小编给大家介绍的Bootstrap 表单验证formValidation 实现表单动态验证功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript下阻止表单重复提交、防刷新、防后退
Aug 17 Javascript
JQuery 弹出框定位实现方法
Dec 02 Javascript
JavaScript中的稀疏数组与密集数组[译]
Sep 17 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
Jan 16 Javascript
8个实用的jQuery技巧
Mar 04 Javascript
jQuery+CSS实现简单切换菜单示例
Jul 27 Javascript
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
vue组件父与子通信详解(一)
Nov 07 Javascript
jQuery实现表格隔行换色
Sep 01 jQuery
jQuery实现动态添加和删除input框代码实例
Mar 29 jQuery
iphone刘海屏页面适配方法
May 07 Javascript
js简单遍历获取对象中的属性值的方法示例
Jun 19 Javascript
JavaScript中offsetWidth的bug及解决方法
May 17 #Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
May 17 #Javascript
基于vue+ bootstrap实现图片上传图片展示功能
May 17 #Javascript
JavaScript运动框架 多物体任意值运动(三)
May 17 #Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
May 17 #Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
May 17 #Javascript
vue之nextTick全面解析
May 17 #Javascript
You might like
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
php连接数据库代码应用分析
2011/05/29 PHP
php中global和$GLOBALS[]的分析之一
2012/02/02 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
PHP中的session安全吗?
2016/01/22 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
javascript 写类方式之四
2009/07/05 Javascript
理解Javascript_05_原型继承原理
2010/10/13 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
2013/06/27 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
matplotlib设置legend图例代码示例
2017/12/19 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
python递归法解决棋盘分割问题
2019/07/17 Python
Pytorch对Himmelblau函数的优化详解
2020/02/29 Python
Python求凸包及多边形面积教程
2020/04/12 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
大学生个人求职信例文
2014/07/07 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
导游词之西安骊山
2019/12/20 职场文书
微信小程序APP页面的之间的相互传递参数以及自定义组件
2022/04/19 Javascript
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技