浏览 1920 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-03
为了验证输入域的值为唯一值,扩展了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 } }); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |