现在使用了一个验证框架,代码如下
initialize : function(form, options){
this.options = Object.extend(new ValidationDefaultOptions(), options || {});
this.form = $(form);
var formId = ValidationUtils.getElmID($(form));
Validation.validations[formId] = this;
if(this.options.onSubmit) Event.observe(this.form,'submit',this.onSubmit.bind(this),false);
if(this.options.immediate) {
var useTitles = this.options.useTitles;
var callback = this.options.onElementValidate;
Form.getElements(this.form).each(function(input) {
Event.observe(input, 'blur', function(ev) { Validation.validateElement(Event.element(ev),{useTitle : useTitles, onElementValidate : callback}); });
});
}
这里给jsp的form绑定了一个onsubmit。
因为验证框架只是做一些比如,是否输入的数据满足要求这些的验证,在具体的jsp页面上,在提交时,form的onsubmit="return tosubmit();"还需要做些另外的验证,比如数据是否已经提交。验证是否提交的方法实现是,
var checkded = false;
function tosubmit(){
if(checked){
alert('已经提交了');
return false;
}
....
checked = true;
}
现在遇到的问题是,
实际发现,在jsp上的函数,tosubmit的执行总是在框架绑定的onsubmit前执行。这样就造成了,当因为框架验证没有通过时,checked已经是true了。如果改了输入的数据,再次提交,就会提示说:已经提交了。
查了很多资料,没想到方法。
[b]问题补充:[/b]
你可以把给document.body.onload绑定事件,给这个form设置框架要绑定的onsubmit
---多谢lovewhzlq
不过,没太看明白?
我想的最好是,框架中的代码不进行更改能够达到效果就最好。
[b]问题补充:[/b]
document.getElementsByTagName("form")[0].addEventListener('onsubmit',function(e){
return test();
},false);
我在onload中加上这个,最终的结果是我的test函数没有运行。
onsubmit换成submit相同的结果。