//验证码控件
Ext.define('ux.form.field.Verify', {
extend: 'Ext.container.Container',
alias: ['widget.fieldVerify'],
requires: ['Ext.Img', 'Ext.form.field.Text'],
layout: {
type: 'hbox',
align: 'stretch'
},
config: {
//文本框内刷新按钮
refresh: false,
//文本框
textfield: {
hideLabel: true,
emptyText: '请输入验证码'
},
//图片
img: {
flex: 1,
height: 53,
margin: '0 0 0 2',
alt: '点击刷新'
}
},
//初始化
initComponent: function () {
var me = this;
me.callParent(arguments);
//新增
me.add([me.getTextfield(), me.getImg()]);
},
//创建文本框
applyTextfield: function (config) {
return Ext.factory(config, Ext.form.field.Text, this.getTextfield());
},
//创建图片
applyImg: function (config) {
return Ext.factory(config, Ext.Img, this.getImg());
},
//更新图片
updateImg: function (newItem, oldItem) {
if (newItem) {
//隐藏就不显示验证码
if (!this.isHidden()) {
newItem.setSrc(this.codeImgUrl);
}
newItem.on({
scope: this,
click : {
element : 'el',
fn :'onRefreshImg'
}
});
}
},
//更新文本框内置按钮
updateRefresh: function (newItem, oldItem) {
if (newItem) {
var textfield = this.getTextfield();
newItem.handler = 'onRefreshImg';
newItem.scope = this;
textfield.setTriggers({ refresh: newItem});
}
},
setHidden: function (value) {
var me = this,
allowBlank = true,
back;
back = me.callParent(arguments);
if (!value) {
me.onRefreshImg();
allowBlank = false;
}
me.getTextfield().setAllowBlank(allowBlank);
return back;
},
//刷新验证码
onRefreshImg: function () {
if (!this.isHidden()) {
var img = this.getImg();
img.setSrc(this.codeImgUrl + '?time=' + new Date().getTime());
}
}
});

相关sass:

    .password-trigger,
.auth-email-trigger,
.auth-password-trigger,
.auth-envelope-trigger {
&:before {
top: 10px;
left: -18px;
position: relative;
color: $dialog-trigger-color;
font-size: 30px;
} &.password-trigger:before,
&.auth-password-trigger:before {
content: "\f023";
} &.auth-email-trigger:before {
content: "\f007";
} &.auth-envelope-trigger:before {
content: "\f0e0";
}
}

用法:

             xtype: 'fieldVerify',
//验证码地址
codeImgUrl: config.codeImg,
//文本框配置
textfield: {
name: 'captcha',
msgTarget: 'qtip'
},
//文本框内置按钮
refresh: {
cls: 'auth-envelope-trigger fa-refresh'
}

ux.form.field.Verify 验证码控件的更多相关文章

  1. ux.form.field.GridDate 支持快速选择日期的日期控件

    效果如图,亲测6.2.1版本可用 /** *支持快速选择日期的日期控件 */ Ext.define('ux.form.field.GridDate', { extend: 'Ext.form.fiel ...

  2. ux.form.field.KindEditor 所见所得编辑器

    注意需要引入KindEditor相关资源 //所见所得编辑器 Ext.define('ux.form.field.KindEditor', { extend: 'Ext.form.field.Text ...

  3. ux.form.field.SearchField 列表、树形菜单查询扩展

    //支持bind绑定store //列表搜索扩展,支持本地查询 //支持树形菜单本地一级菜单查询 Ext.define('ux.form.field.SearchField', { extend: ' ...

  4. ux.form.field.Year 只能选年的时间扩展

    效果如图,亲测6.2.1版本可用,用法同时间选择控件 //只选择年的控件 Ext.define('ux.picker.Year', { extend: 'Ext.Component', alias: ...

  5. ux.form.field.Month 只能选年、月的时间扩展

    效果如图,亲测6.2.1版本可用,用法同时间选择控件 //月弹窗扩展 //只选月 Ext.define('ux.picker.Month', { extend: 'Ext.picker.Month', ...

  6. ux.form.field.Password 密码与非密码状态切换

    效果如图: 扩展源码: //扩展 //密码按钮扩展 //支持在密码与非密码之间切换 Ext.define('ux.form.field.Password', { extend: 'Ext.form.f ...

  7. ux.form.field.TreePicker 扩展,修复火狐不能展开bug

    /** * A Picker field that contains a tree panel on its popup, enabling selection of tree nodes. * 动态 ...

  8. Extjs4 关于设置form中所有子控件为readOnly属性的解决方案

    之前在网上找了一堆,但那些确实没法用,后来考虑了一下,发现主要是网上提供的假设form中只有一层控件,没有考虑到布局稍微复杂的form情形,此处采用递归的形式实现对form中所有控件(grid及but ...

  9. Android 短信验证码控件

    Android 短信验证码控件,便于项目中使用统一样式,统一提示改动.个人觉得挺好用的 <span style="font-size:18px;">public cla ...

随机推荐

  1. 对VM挂载新加入的磁盘

    在虚拟机配置中增加磁盘后,启动Linux,使用root登录. 首先查看未分区的磁盘,使用下面命令: ## 查看未使用的磁盘 fdisk -l 磁盘/dev/sdb后面没有任何分区,是新挂载的磁盘 输入 ...

  2. C#与数据库访问技术总结(十六)之 DataSet对象

    DataSet对象 DataSet对象可以用来存储从数据库查询到的数据结果,由于它在获得数据或更新数据后立即与数据库断开,所以程序员能用此高效地访问和操作数据库. 并且,由于DataSet对象具有离线 ...

  3. Why we need model on Django ?

    step01: create a database name as (django_db) on mysql ... step02: configure your django to use the ...

  4. atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

    atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7 1. 实现原理 1 2. 大的文件上传原理::使用applet 1 3. 新的bp 2 1. 性能提升---分割小文件上传 ...

  5. Leetcode 121 Best Time to Buy and Sell Stock 动态规划

    由于题意太长,请自己翻译,很容易懂的. 做法:从前向后遍历数组,记录当前出现过的最低价格,作为买入价格,并计算以当天价格出售的收益,作为可能的最大收益,整个遍历过程中,出现过的最大收益就是所求.动态规 ...

  6. textViewDidChange: crashes in iOS 7

    What's happening is that you're typing what is referred to as multistage text input, i.e. the input ...

  7. spring官方案例程序

    https://github.com/spring-projects/spring-data-book https://github.com/spring-projects 包含其他相关的应用程序

  8. XMPP系列2:如何掌握XMPP协议

    michaely 回答于 2012-08-07 08:34 举报我要说的是:1.任何一个协议想学习并熟练掌握,都不是一天两天的事情.2.XMPP协议现在已经有很多成熟的架构和客户端,无需重新造轮子.3 ...

  9. Express ejs 3.* layout.ejs

    新版本改成了 <%- include file.ejs %> 具体使用方法如下:1. views文件夹 下新建header.ejs,插入代码 <html><head> ...

  10. IOC性能对比