本人对prototype.js进行的扩展

很老的帖子了, 发在[url=http://ajaxcn.org/space/start/2006-05-24/3]ajaxcn.org[/url]上,贴到这里,以后查找方便

最近的项目中要使用ajax, 于是对各种ajax framework在进行比较之后,最终选择了prototype.js, 由于prototype.js是一个非常基础的ajax framework, 需要根据项目需求自己来进行一些扩展, 下面就是我所做的一些扩展, 如有误, 请指正!
我实现了一个Form.Element.ValidationObserver, 这个类需要依赖Validation.js以及相应的css(validation-advice), 该类是对表单中的单个元素通过ajax结合后台进行验证,其中因为无法实现对Validation.js进行重用,所以copy了其中的一些代码, 我实在想不到更好的办法,如果有哪位有更好的做法,不吝赐教!

   
/*
* 对Form.Element进行扩展
*/
Object.extend(Form.Element, {
/*
* 使指定的element不可用
*/
disable: function(element) {
element = $(element);
element.disabled = 'true';
},
/*
* 使指定的element可用
*/
enable: function(element) {
element = $(element);
element.disabled = '';
},
/*
* 判断值是否为空
*/
empty: function(element){
return this.getValue(element).match(/^s*$/);
},
/*
* 判断值是否不为空
*/
notEmpty: function(element){
return !this.empty(element);
}
});

/*
* 对Element进行扩展
*/
Object.extend(Element, {
/*
* 以块状显示指定的element
*/
block: function(){
for (var i = 0; i < arguments.length; i++) {
var element = $(arguments[i]);
element.style.display = 'block';
}
}
});

/*
* 验证观察者, 用来实现对指定字段进行验证
* 复写Abstract.EventObserver.initialize(), 在回调函数中通过ajax发送消息进行后台验证
*/
Form.Element.ValidationObserver = Class.create();
Object.extend(Object.extend(Form.Element.ValidationObserver.prototype, Form.Element.EventObserver.prototype),{
/*
* 对Form.Element.EventObserver.initialize进行的修改, 将要注册的验证回调函数设置为创建ajax验证请求
* element 为需要验证的元素
* url 为ajax要发送请求的地址
* parameterCallback 为取得验证参数的回调函数
* 使用方法:
* new Form.Element.ValidationObserver("pol",
"http://localhost:8080/agreement/ValidatePol",
function(){return Form.Element.serialize("pol");});
*/
initialize: function(element, url, parameterCallback) {
this.element = $(element);
this.callback = function(element, value){
new Ajax.Validator(element, url, {parameters: parameterCallback()});
} this.lastValue = this.getValue();
this.registerCallback(this.element); }
})

/*
* 新增通过Ajax进行验证类
* 借鉴Validation验证类
*/
Ajax.Validator = Class.create();
Object.extend(Object.extend(Ajax.Validator.prototype, Ajax.Request.prototype),{
initialize: function(validated, url, options) {
this.element = $(validated); this.transport = Ajax.getTransport();
this.setOptions(options); var onComplete = this.options.onComplete || Prototype.emptyFunction;
this.options.onComplete = (function(transport, object) {
this.updateContent();
onComplete(transport, object);
}).bind(this); this.request(url);
},

/*
* 根据后台返回的结果, 如果返回responseText为空则表示验证通过,不显示出错信息
* 否则将返回responseText作为出错信息显示
*/
updateContent: function() {
var response = this.transport.responseText; if (!this.options.evalScripts)
response = response.stripScripts(); var id = 'advice-' + this.element.id;
var prop = '__advice';
if(Validation.isVisible(this.element) && !response == "") {
if(!this.element[prop]) {
var advice = document.createElement('div');
advice.appendChild(document.createTextNode(response));
advice.className = 'validation-advice';
advice.id = id;
advice.style.display = 'none';
this.element.parentNode.insertBefore(advice, this.element.nextSibling);
if(typeof Effect == 'undefined') {
advice.style.display = 'block';
} else {
new Effect.Appear(advice.id, {duration : 1 });
}
}
this.element[prop] = true;
} else {
try {
$(id).remove();
} catch(e) {}
this.element[prop] = '';
}
}
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值