Ext扩展TriggerField实现唯一值校验

为了验证输入域的值为唯一值,扩展了Ext.form.TirggerField 实现Ajax方式的自定义验证输入域。原使用Ext.Ajax的内置方法,但Doc中对request方法的特别注释是:

 

Important: Ajax server requests are asynchronous, and this call will return before the response has been received. Process any returned data in a callback function.

To execute a callback function in the correct scope, use the scope option.

 

如上所说,Ajax服务请求是异步的,即函数会立即返回,然后是执行callback回调方法,这样就会产生时序问题,TriggerField的validator方法会首先接收到函数的undefined返回,这样验证就出现了错误,会误认为验证失败,但Ext.Ajax的config option中没有关于XMLHttpRequest使用异步还是同步的方式请求的设置。这样就没办法解决时序问题,所以改为使用Prototype的Ajax对象实现此功能,Prototype的Ajax中有asynchronous项属性来决定到底使用同步还是异步方式来请求,把asynchronous: false ,时序问题就迎刃而解了。

 

  Ext.ux.UniqueField = Ext.extend(Ext.form.TriggerField, {
			allowBlank: false,
			validateOnBlur: true,  
			invalidText: '此字段值需唯一!',
			validator: function() {
				uniqueFieldValidation(this);
				return valid;
			},
			onTriggerClick: function() {
				uniqueFieldValidation(this);
				return valid;
			}
		});

		var valid = '';
		function uniqueFieldValidation(element) {
			new Ajax.Request('dictionaryCodeValidation.do', {
					asynchronous: false,
					onSuccess: function(response) {
					var result = response.responseText.evalJSON();
					if(result.isUniqueCode) {
						valid = true;
						return;
					} else {
						valid = false;
						return;
					}
				},
				parameters: { dictionaryCode: $(element.getId()).value }
			});
		}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值