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 相关文章推荐
初学prototype,发个JS接受URL参数的代码
Sep 25 Javascript
一个不错的应用,用于提交获取文章内容,不推荐用
Mar 03 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
Nov 25 Javascript
使用jQuery实现Web页面换肤功能的要点解析
May 12 Javascript
详解webpack+vue-cli项目打包技巧
Jun 17 Javascript
利用C/C++编写node.js原生模块的方法教程
Jul 07 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
Dec 04 Javascript
JS实现520 表白简单代码
May 21 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
May 10 Javascript
JavaScript变量作用域及内存问题实例分析
Jun 10 Javascript
JS图片懒加载技术实现过程解析
Jul 27 Javascript
微信小程序实现底部弹出模态框
Nov 18 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
PHP 存取 MySQL 数据库的一个例子
2006/10/09 PHP
PHP操作数组相关函数
2011/02/03 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
linux下php上传文件注意事项
2016/06/11 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
浅谈php://filter的妙用
2019/03/05 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
ES6知识点整理之对象解构赋值应用示例
2019/04/17 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
python学习手册中的python多态示例代码
2014/01/21 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
Python调用C/C++的方法解析
2020/08/05 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
高三自我鉴定
2013/10/23 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
作风建设整改方案
2014/10/27 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
追悼会答谢词
2015/01/05 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
月考总结与反思
2015/10/22 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
python和anaconda的区别
2022/05/06 Python