教你用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 相关文章推荐
JQuery给元素添加/删除节点比如select
Apr 02 Javascript
JS获取各种浏览器窗口大小的方法
Jan 14 Javascript
Angular 中 select指令用法详解
Sep 29 Javascript
yarn与npm的命令行小结
Oct 20 Javascript
d3.js中冷门却实用的内置函数总结
Feb 04 Javascript
javascript编写简易计算器
May 06 Javascript
Vue.js手风琴菜单组件开发实例
May 16 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
Jul 19 Javascript
在React中如何优雅的处理事件响应详解
Jul 24 Javascript
微信小程序中post方法与get方法的封装
Sep 26 Javascript
vue和webpack安装命令详解
Jun 15 Javascript
Vue页面跳转传递参数及接收方式
Sep 09 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+DBM的同学录程序(2)
2006/10/09 PHP
PHP中uploaded_files函数使用方法详解
2011/03/09 PHP
PHP array操作10个小技巧分享
2011/06/23 PHP
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
js中less常用的方法小结
2017/08/09 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
Python基于twisted实现简单的web服务器
2014/09/29 Python
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
Python对象的属性访问过程详解
2020/03/05 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
Pandas之缺失数据的实现
2021/01/06 Python
基本款天堂:Everlane
2017/05/13 全球购物
经典优秀个人求职信分享
2013/12/12 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
聚美优品广告词改编
2014/03/14 职场文书
表扬通报怎么写
2015/01/16 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL
python基础之类方法和静态方法
2021/10/24 Python