原文地址:http://blog.csdn.net/kunoy/article/details/8007585

本文主要解决问题:

1、区分哪些文本框不允许为空,很多网站都采用在文本框后加*号,extjs也可以用lable组件标识,但这样做很麻烦,每一个不允许为空的文本框都需要多加一个lable组件,如果用一个方法自动为不允许为空的文本框加上这个*号,在form等布局的情况下,也是可行的,但如果是absolute布局,你会发现界面就不那么舒畅了。

2、添加文本框验证错误提示,如果你采用的是form布局,extjs已经自带了在文本框后加一个红色感叹号的提示,但往往很多界面采用的是absolute布局,这时红色感叹号就打死也不会出现了,本文就解决这一问题,并且在点击保存时统一验证每一个文本框,如果存在验证错误,提示错误信息并返回。

extjs自带的在form布局下的错误提示:

首先定义样式:

设置不允许为空的文本框属性如下:

当然如果一个界面需要设置的textField太多,可定义方法:

Ext.ComponentMgr.all.each(function(cmp){

var Type=cmp.getXType();         if(Type=='textfield'||Type=='fileuploadfield'||Type=='combo'||Type=='treecombo'||Type=='datefield'||Type=='numberfield'||Type=='textarea'||Type=='timefield'||Type=='trigger'){

if(cmp.allowBlank==false){

cmp.cls="Diy-text";

cmp.blankText="该输入项不能为空!";

}

}

});

}

初始化调用setDiyTextField()即可,效果如下:


        说明:这里使用background-image,强制覆盖了extjs自己的文本框样式,不仔细看,其实差别很小。

        下面该定义validateValue方法了,代码如下:

Ext.form.TextField.prototype.validateValue = function(value){

var iconid=this.id+"icon";

var con=document.getElementById(iconid);

var error = this.getErrors(value)[0];

if (error != undefined) {

this.markInvalid(error);

  1. setValidIcon(con,this);
  2. return false;
  3. }
  4. this.clearInvalid();
  5. return true;
  6. }
  7. function setValidIcon(con,obj){
  8. if(con==null){
  9. var x0=0,y0=0;
  10. x0=(obj.x+obj.getWidth()-18)||(obj.getWidth()+85);
  11. y0=obj.y||0;
  12. if(obj.getXType()=="combo"||obj.getXType()=='treecombo'||obj.getXType()=="datefield"||obj.getXType()=="fileuploadfield"){
  13. var wid=document.getElementById(obj.id).style.width;
  14. wid=wid.substring(0,wid.length-2);
  15. x0=Number(wid);
  16. y0=0;
  17. }
  18. var parentNode=document.getElementById(obj.id).parentNode;
  19. var newChild=document.createElement("div");
  20. newChild.setAttribute("name","invalid-icon");
  21. newChild.setAttribute("id",obj.id+"icon");
  22. newChild.setAttribute("class","x-form-invalid-icon");
  23. newChild.setAttribute("className","x-form-invalid-icon");
  24. newChild.setAttribute("style","left:"+x0+"px; top:"+y0+"px; visibility: visible;z-index:10;");
  25. parentNode.appendChild(newChild);
  26. }
  27. }

网上也有一段重写validateValue的方法,笔者也是从那里借鉴过来的,表示感谢,但那段代码直接从本质上重写了:自己写代码判断文本框是否为空,是否满足Vtype设置,是否满足validator函数等,其中就漏掉了日期控件对日期格式的验证方法,好吧,我们就去extjs里面找这段方法吧(笔者有点傻,还真去找了,可惜没找到)。最后仔细看了extjs的validateValue方法,都调用了getErrors()方法,也就是说所有错误验证都在这个方法里面,而我们并不需要改写这个方法,只是增加一个验证提示,故修改为:

  1. var error = this.getErrors(value)[0];
  2. if (error != undefined) {
  3. this.markInvalid(error);
  4. setValidIcon(con,this);
  5. return false;
  6. }
  7. this.clearInvalid();
  8. return true;

其中setValidIcon(con,this)就是增加错误提示。最后效果如下:

  说明:笔者将红色感叹号设置在文本框范围内,从而不影响布局效果,使用getErrors之后,效果真完美,所有allowBlank,vtype,validator,maxValue,minValue,format等该验证的都验证了。

     下面就解决如果清除这个感叹号提示,一种方法是在validateValue里增加清除,比如:

  1. Ext.form.TextField.prototype.validateValue = function(value){
  2. var iconid=this.id+"icon";
  3. var con=document.getElementById(iconid);
  4. var error = this.getErrors(value)[0];
  5. if (error != undefined) {
  6. this.markInvalid(error);
  7. setValidIcon(con,this);
  8. return false;
  9. }
  10. if(Ext.get(iconid)){
  11. Ext.get(iconid).remove();//在这里清除
  12. }
  13. this.clearInvalid();
  14. return true;
  15. }

由于联系到笔者之前写的clearAll()函数,即当你需要清空一个文本框,并且清除错误提示,不可能还另外多写一句Ext.get(iconid).remove()吧?故笔者再重写clearInvalid方法:

  1. Ext.form.TextField.prototype.clearInvalid=function(){
  2. if (this.rendered && !this.preventMark) {
  3. this.el.removeClass(this.invalidClass);
  4. var mt = this.getMessageHandler();
  5. if(mt){
  6. mt.clear(this);
  7. }else if(this.msgTarget){
  8. this.el.removeClass(this.invalidClass);
  9. var t = Ext.getDom(this.msgTarget);
  10. if(t){
  11. t.innerHTML = '';
  12. t.style.display = 'none';
  13. }
  14. }
  15. var iconid=this.id+"icon";
  16. if(Ext.get(iconid)){
  17. Ext.get(iconid).remove();
  18. }
  19. }
  20. this.unsetActiveError();
  21. }

到此完整解决了我们需要的提示,最后添加一个函数,当保存时判断哪些文本框是验证错误的。

  1. function checkVtype(){
  2. var re=true;
  3. Ext.ComponentMgr.all.each(function(cmp){
  4. var Type=cmp.getXType();
  5. if(Type=='textfield'||Type=='combo'||Type=='treecombo'||Type=='datefield'||Type=='numberfield'||Type=='textarea'||Type=='timefield'||Type=='trigger'){
  6. if(cmp.isVisible()){
  7. var va=cmp.isValid();
  8. re=va?re:va;
  9. }
  10. }
  11. });
  12. if(re==false)
  13. Ext.MessageBox.show({title: '错误',msg: "您输入的信息验证错误,请核对后再执行该操作!<br/><span style='color:brown;'>错误原因:</span><span style='color:red;'>格式不正确或输入值为空。</span>",buttons: Ext.MessageBox.OK,icon: Ext.MessageBox.ERROR});
  14. return re;
  15. }

checkVtype()返回true,验证正确,返回false,验证错误。

原文地址:http://blog.csdn.net/kunoy/article/details/8007585

目录视图摘要视图订阅 基于Extjs开发不允许为空的文本框提示及相应的验证错误提示(转)的更多相关文章

  1. iOS 9应用开发教程之显示编辑文本标签文本框

    iOS 9应用开发教程之显示编辑文本标签文本框 ios9显示.编辑文本 在iOS,经常会看到一些文本的显示.文字就是这些不会说话的设备的嘴巴.通过这些文字,可以很清楚的指定这些设备要表达的信息.本节将 ...

  2. 基于QT的webkit与ExtJs开发CB/S结构的企业应用管理系统

      一:源起       1.何为CB/S的应用程序       C/S结构的应用程序,是客户端/服务端形式的应用程序,这种应用程序要在客户电脑上安装一个程序,客户使用这个程序与服务端通信,完成一定的 ...

  3. [转载]开发 Spring 自定义视图和视图解析器

    原文出处 http://www.ibm.com/developerworks/cn/java/j-lo-springview/ 概述 Spring 3.0 默认包含了多种视图和视图解析器,比如 JSP ...

  4. IOS开发之视图和视图控制器

    视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西.在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多.在UIKit框架中都有一 ...

  5. MVC 多级目录(控制器) 路由重写 及 多级Views目录 的寻找视图的规则

    转自:[原]Asp.net Mvc   多级控制器 路由重写 及 多级Views目录 的寻找视图的规则 asp.net mvc 为了更好的控制views的页面存放,和控制器的可读性,需要分开多级目录来 ...

  6. Cocos2d-x 坑之一:Xcode文件真实目录与工程视图目录

    Cocos2d-x一定要保证 Xcode文件真实目录与工程视图目录 的一致性,不然,会出现文件读取不了,或include不了的情况. 如果出现此类情况,优先查看真实目录的结构.

  7. SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识

    原文:SQL点滴17-使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识 在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息 ...

  8. 基于Extjs+SpringMVC+MyBatis+Oracle的B/S信息系统简化开发思路

    要在上层简化就得有下层强大的架构作为支撑,通过采用企业级的各种框架,虽然学习成本高一些,但用好了效率也自然高. 数据层简化: 首先所有表都有名称为ID的主键字段.有与表同名的序列作为自增key. 数据 ...

  9. iOS 9应用开发教程之多行读写文本ios9文本视图

    iOS 9应用开发教程之多行读写文本ios9文本视图 多行读写文本——ios9文本视图 文本视图也是输入控件,与文本框不同的是,文本视图可以让用户输入多行,如图2.23所示.在此图中字符串“说点什么吧 ...

随机推荐

  1. JS排序:localeCompare() 方法实现中文排序、sort方法实现数字英文混合排序

    定义:用本地特定的顺序来比较两个字符串. 语法:stringObject.localeCompare(target) 参数:target——要以本地特定的顺序与 stringObject 进行比较的字 ...

  2. QSignalMapper类的使用

    Qt中当定义了非常多的button,而他们的信号都同样时(比方都是点击信号),没有必要给他们每一个都设置信号和槽的链接.QSignalMapper给我们攻克了这个难题. 今天完毕这个相似的功能时,不知 ...

  3. An incompatible version 1.1.14 of APR based Apache Tomcat Native library is installed, while Tomcat

    启动tomcat 7.0, 看到日志里出现严重警告, An incompatible version 1.1.14 of APR based Apache Tomcat Native library ...

  4. 电子商务ICP经营许可证申请条件

    电子商务ICP经营许可证申请条件:注册资金100万的纯内资公司:服务器在本地:域名备案以公司名义备案:申请条件:1.公司营业执照副本复印件需清晰有效,并已完成该年度年检事宜,特别注意营业执照的有效期要 ...

  5. [Functional Programming Monad] Apply Stateful Computations To Functions (.ap, .liftA2)

    When building our stateful computations, there will come a time when we’ll need to combine two or mo ...

  6. M.U.G.E.N Error怎么办

    当运行乱舞格斗2008的时候出现以下错误. 在任务管理器中找到M.U.G.E.N.exe这个进程,右击设置相关性,然后取消勾选其中一个,点击确定. 不要关闭这个窗口,否则M.U.G.E.N这个进程也将 ...

  7. WCF 之 初识WCF

    在编程中服务的作用越来越大了,.net从2.0的 webservice,到3.5之后的WCF,服务的功能越来越强了.现在先从简单的看起,先看看WCF服务的发布. 现在来看看一步一步发布 WCF 服务. ...

  8. iOS工程中的info.plist文件的完整研究

    原地址:http://blog.sina.com.cn/s/blog_947c4a9f0100zf41.html 们建立一个工程后,会在Supporting files下面看到一个"工程名- ...

  9. java设计模式之策略

    今天你的leader兴致冲冲地找到你,希望你可以帮他一个小忙,他现在急着要去开会.要帮什么忙呢?你很好奇. 他对你说,当前你们项目的数据库中有一张用户信息表,里面存放了很用户的数据,现在需要完成一个选 ...

  10. winfrom cahce 问题

    .Clear()不能随便用 .Clear()的比较没有什么意思,因为只是把DataTable清空而已,在堆中任然分配内存,一般要比较也是比较Close()方法,不过DataTable没有这个方法 至于 ...