教你用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 相关文章推荐
Javascript 构造函数 实例分析
Nov 26 Javascript
IE本地存储userdata的一个bug说明
Jul 01 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
Jul 28 Javascript
js实现带三角符的手风琴效果
Mar 01 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
Mar 10 Javascript
浅谈 Vue 项目优化的方法
Dec 16 Javascript
JavaScript图片处理与合成总结
Mar 04 Javascript
jQuery简单判断值是否存在于数组中的方法示例
Apr 17 jQuery
JS判断数组里是否有重复元素的方法小结
May 21 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
Aug 11 Javascript
vue实现数字动态翻牌的效果(开箱即用)
Dec 08 Javascript
Vue实现可移动水平时间轴
Jun 29 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 Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
php常用文件操作函数汇总
2014/11/22 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
Python实现两个list对应元素相减操作示例
2017/06/09 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
《少年王冕》教学反思
2014/04/11 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
就业协议书样本
2014/08/20 职场文书
党员查摆问题及整改措施
2014/10/10 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
学校少先队工作总结
2015/08/12 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL