dojo小例子34带Ajax异步验证功能的ValidationTextBox

define([ 
	"dojo/_base/declare","dijit/form/ValidationTextBox","dojo/request"
],function(declare,ValidationTextBox,request) {
	return declare("AjaxValidationTextBox",[ ValidationTextBox ],{
		ajaxUrl : null,ajaxLock : false,// 钩子,防止出现死循环
		ajaxResult : false,oldValue : null,// 用于对比输入值是否有变化
		changed : false,// 标识:输入值是否有变化

		isValid : function() {
			var widget = this;
			this.changed = false;

			if (this.get('value') != this.oldValue) {
				this.changed = true;
			}
			if (!this.ajaxLock && this.ajaxUrl && this.get('value') && !this.focused && this.changed) {
				this.oldValue = this.get('value');
				this.ajaxLock = true;

				request(widget.ajaxUrl + encodeURIComponent( widget.get('value') ),{
					handleAs : 'text'
				}).then(function(result) {
					widget.ajaxResult = (result == "true" ? true : false);
					widget.validate(); // 会调用isValid方法重新校验输入的值,弹出tip
					widget.ajaxLock = false;
				});
			}

			return this.ajaxResult;
		}
	});

});

用法:

<input data-dojo-type="my/AjaxValidationTextBox" data-dojo-props="
				required : true,missingMessage:'编号不能为空!',ajaxUrl:/rest/isNumValid/',invalidMessage:'编号已存在!'"  />

相关文章

我有一个网格,可以根据更大的树结构编辑小块数据.为了更容易...
我即将开始开发一款教育性的视频游戏.我已经决定以一种我可以...
我正在使用带有Grails2.3.9的Dojo1.9.DojoNumberTextBox小部...
1.引言鉴于个人需求的转变,本系列将记录自学arcgisapiforja...
我正在阅读使用dojo’sdeclare进行类创建的语法.描述令人困惑...
我的团队由更多的java人员和JavaScript经验丰富组成.我知道这...