教你用AngularJS框架一行JS代码实现控件验证效果


Posted in Javascript onJune 23, 2014

教你用AngularJS框架一行JS代码实现控件验证效果

如上图所示,我们需要实现如下这些验证功能:

控件都是必输控件
都需要控制最大长度
第一次打开页面,控件不能显示为错误状态
输入内容再清空后,必输控件需要显示为错误状态
只有所有输入合法后,发布按钮才能变为可用状态
通过AngularJS,我们可以很轻松的实现这些要求,只需要1行JS代码。UI样式这里采用的是Bootstrap。先上示例代码:

HTML。

<!DOCTYPE html>
<html lang="zh-cn" ng-app="ftitApp">
<head>
 <meta charset="utf-8" />
 <title>Demo</title>
 <link href="/Content/bootstrap.css" rel="stylesheet"/>
 <script src="/Scripts/angular.js"></script>
</head>
<body>
 <div class="container body-content">
  <!-- 主要内容区域 -->
  <div class="row main-content">
   <div class="col-md-9">

    <!-- 联系我们表单区域 -->
    <form action="/Contact/Create" method="post" role="form" name="createContactForm" ng-controller="ContactCreateController">
     <!-- UserName 您的称呼 -->
     <div class="form-group has-feedback" ng-class="{'has-success' : !createContactForm.UserName.$pristine && createContactForm.UserName.$valid, 'has-error' : !createContactForm.UserName.$pristine && createContactForm.UserName.$invalid }">
      <label for="UserName">您的称呼*</label>
      <input type="text" class="form-control" ng-model="userName" name="UserName" autofocus="" required ng-maxlength=30>
      <div ng-show="!createContactForm.UserName.$pristine && createContactForm.UserName.$valid">
       <span class="glyphicon glyphicon-ok form-control-feedback"></span>
      </div>
      <div ng-show="!createContactForm.UserName.$pristine && createContactForm.UserName.$invalid">
       <span class="glyphicon glyphicon-remove form-control-feedback"></span>
      </div>
     </div>
     <!-- UserMail 邮箱地址 -->
     <div class="form-group has-feedback" ng-class="{'has-success' : !createContactForm.UserMail.$pristine && createContactForm.UserMail.$valid, 'has-error' : !createContactForm.UserMail.$pristine && createContactForm.UserMail.$invalid }">
      <label for="UserMail">邮箱地址*</label>
      <input type="email" class="form-control" ng-model="userMail" name="UserMail" required ng-maxlength=30>
      <div ng-show="!createContactForm.UserMail.$pristine && createContactForm.UserMail.$valid">
       <span class="glyphicon glyphicon-ok form-control-feedback"></span>
      </div>
      <div ng-show="!createContactForm.UserMail.$pristine && createContactForm.UserMail.$invalid">
       <span class="glyphicon glyphicon-remove form-control-feedback"></span>
      </div>
     </div>
     <!-- Subject 主题 -->
     <div class="form-group has-feedback" ng-class="{'has-success' : !createContactForm.Subject.$pristine && createContactForm.Subject.$valid, 'has-error' : !createContactForm.Subject.$pristine && createContactForm.Subject.$invalid }">
      <label for="Subject">主题*</label>
      <input type="text" class="form-control" ng-model="subject" name="Subject" required ng-maxlength=100>
      <div ng-show="!createContactForm.Subject.$pristine && createContactForm.Subject.$valid">
       <span class="glyphicon glyphicon-ok form-control-feedback"></span>
      </div>
      <div ng-show="!createContactForm.Subject.$pristine && createContactForm.Subject.$invalid">
       <span class="glyphicon glyphicon-remove form-control-feedback"></span>
      </div>
     </div>
     <!-- Content 内容 -->
     <div class="form-group has-feedback" ng-class="{'has-success' : !createContactForm.Content.$pristine && createContactForm.Content.$valid, 'has-error' : !createContactForm.Content.$pristine && createContactForm.Content.$invalid }">
      <label for="Content">内容*</label>
      <textarea cols="4" rows="5" class="form-control" ng-model="content" name="Content" required ng-maxlength=1000></textarea>
      <div ng-show="!createContactForm.Content.$pristine && createContactForm.Content.$valid">
       <span class="glyphicon glyphicon-ok form-control-feedback"></span>
      </div>
      <div ng-show="!createContactForm.Content.$pristine && createContactForm.Content.$invalid">
       <span class="glyphicon glyphicon-remove form-control-feedback"></span>
      </div>
     </div>
     <!-- 提交按钮 -->
     <div class="form-group">
      <div ng-show="createContactForm.$valid">
       <input type="image" src="/Content/images/comment_publish_button.png" onsubmit="submit();" value="发布" ng-disabled='!createContactForm.$valid' />
      </div>
      <div ng-show="!createContactForm.$valid">
       <img src="/Content/images/invalid_publish_button.png" />
      </div>
     </div>
    </form>
   </div>
  </div>
 </div>
 
 <script src="/Scripts/ftit/ContactCreateController.js"></script>
</body>
</html>

JS代码(真的只有一行哟)

ContractCreateController.js

var ftitAppModule = angular.module('ftitApp', []);

这样就好啦。几个关键的地方解释一下:

ng-class:这个标签用来控制class的值。例如ng-class="{'has-success' : !createContactForm.Content.$pristine}的意思就是,如果!createContactForm.Content.$pristine的值为true,class的值就为has-success。
ng-show:控制是否显示该控件。
createContactForm.$valid:全部验证通过后,值为true,否则为false
createContactForm.Content.$valid:标识Content控件是否通过验证,通过为true,否则为false
createContactForm.Content.$pristine:标识Content控件是否从未输入过。从未输入为true,否则为false
更细节的技术问题请查看AngularJS的技术文档。

Javascript 相关文章推荐
Extjs EditorGridPanel中ComboBox列的显示问题
Jul 04 Javascript
js中自定义方法实现停留几秒sleep
Jul 11 Javascript
详解JavaScript中的every()方法
Jun 08 Javascript
使用jspdf生成pdf报表
Jul 03 Javascript
jquery实现未经美化的简洁TAB菜单效果
Aug 28 Javascript
Jquery插件easyUi实现表单验证示例
Dec 15 Javascript
JavaScript html5利用FileReader实现上传功能
Mar 27 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
Feb 23 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
Jul 11 Javascript
vue父组件给子组件的组件传值provide inject的方法
Oct 23 Javascript
vue项目在webpack2实现移动端字体自适配功能
Jun 02 Javascript
js自定义鼠标右键的实现原理及源码
Jun 23 #Javascript
js代码实现的加入收藏效果并兼容主流浏览器
Jun 23 #Javascript
用jquery的方法制作一个简单的导航栏
Jun 23 #Javascript
jquery的attr方法禁用表单元素禁用输入内容
Jun 23 #Javascript
JavaScript获取某年某月的最后一天附截图
Jun 23 #Javascript
一个判断抢购时间是否到达的简单的js函数
Jun 23 #Javascript
extjs_02_grid显示本地数据、显示跨域数据
Jun 23 #Javascript
You might like
剖析 PHP 中的输出缓冲
2006/12/21 PHP
一段php加密解密的代码
2007/07/16 PHP
php zend解密软件绿色版测试可用
2008/04/14 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
PHP URL路由类实例
2013/11/12 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
jQuery的实例及必知重要的jQuery选择器详解
2016/05/20 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
Python机器学习之决策树算法实例详解
2017/12/06 Python
Python自定义简单图轴简单实例
2018/01/08 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
经典c++面试题二
2015/08/14 面试题
国际商务专业学生个人的自我评价
2013/09/28 职场文书
法院信息化建设方案
2014/05/21 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
逃课检讨书
2015/01/26 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
Java 多线程协作作业之信号同步
2022/05/11 Java/Android
python区块链实现简版工作量证明
2022/05/25 Python