论坛首页 Web前端技术论坛

dojo的校验文本框使用中有个问题请教一下:

浏览 5078 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-14  
dojo的校验文本框使用中有个问题请教一下:
就是在这些文本框的校验只是在焦点离开时触发,但是等表单提交时却不触发了,这样的话有些项目校验不正确也会被提交哦。该如何处理?
   发表时间:2007-09-15  
dijit.form.ValidationTextBox的验证功能很强大,但是唯一不好的地方就是不能防止表单提交。

需要我们自己写一个方法防止form在验证失败的情况下提交表单。方法如下:

<script language="javascript">
function checkAll(){
var isOk=true;
dijit.registry.filter(function(widget){return widget.declaredClass=="dijit.form.ValidationTextBox"?true:false;}).forEach(function(widget){
  if(!widget.isValid()){
   alert(widget.invalidMessage);
   isOk=false;
   return;
  }
});
return isOk;
}
</script>

这个方法会自动搜索页面所有ValidationTextBox组件,然后判断是否验证通过,如果没有通过则显示失败提示信息,同时防止表单提交。


只要在form的onSubmit事件上增加这个方法 就可以了。例如:
<form onsubmit="return checkAll()">

这是我在网上搜到的代码,我试了,可是不行,但是这个帖子的主人说可以,请大家帮我试一下
0 请登录后投票
   发表时间:2007-09-18  
搞了半天,把dojo的版本更新到release版本的就成了!
0 请登录后投票
   发表时间:2007-09-20  
你自己在上面搞了半天,还是自己解决了
0 请登录后投票
   发表时间:2007-09-22  
如果一个页面使用了多个类型的控件的话,可以采用下面的代码来检测数据的正确性,只需把下面的declaredClass改一下就可以了,如果没有isValid()属性,可以使用valueOf()获取值以后使用正则表达式进行判断
dijit.registry.filter(function(widget){return widget.declaredClass=="dijit.form.ValidationTextBox"?true:false;}).forEach(function(widget){
if(!widget.isValid()){
alert(widget.invalidMessage);
isOk=false;
return;
} 有问题大家可以讨论
0 请登录后投票
   发表时间:2007-10-15  
至于其他的控件,比如dojo提供的数字校验框NumberTextBox用上面的校验就行不通了,偶的同事提出一个想法大家可以借鉴一下,就是所有的控件(除了日期框)都用ValidationTextBox,然后在其的属性中添加正则表达式校验就可以了。
比如:
<input id="q11" type="text" name="Number" value=""  dojoType="dijit.form.ValidationTextBox"
regExpGen="IsNumber"
trim="true"
        required="true"
invalidMessage="输入合法的Number" />
然后在script中定义这样一个函数:
function IsNumber(){ return "^\\d+$";}
这样就可以了。

0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics