检查dijit表单中的所有字段

时间:2011-10-03 13:17:33

标签: dojo dijit.form

有什么方法可以循环遍历dijit形式的所有dijit字段并打印出它们是否有效。我只是问,因为我的'onValidStateChange'函数禁用了我的提交按钮,我不知道为什么它不会重新启用它。

2 个答案:

答案 0 :(得分:6)

您可以使用dijit.form.Form的getChildren()来获取表单中的所有子窗口小部件,然后使用isValid()检查字段是否有效;

var form, iterFunction;
form = dijit.byId('form');
iterFunction = function(widget){
    console.log(widget.isValid());
};
dojo.forEach(form.getChildren(), iterFunction);

答案 1 :(得分:3)

默认情况下,form.validate()也会验证所有子窗口小部件。如果分别动态地向/从表单添加/删除任何表单小部件,则连接所有子小部件然后验证

form = dijit.byId('form_id');
form.connectChildren();
form.validate();

如果表单有多个选项卡(TabContainer),“connectChildren”函数实际上会将所有后代级别的所有字段附加到父表单对象。我们不需要手动运行循环,除非需要知道任何更多操作的特定字段。

对于特殊情况:如果表单包含许多选项卡,并且需要一次验证每个表单并导航 例如:cp1和cp2是2个选项卡

var mytab1 = dijit.byId("cp1");
var canNavigate = true;
var highlight = function(widget){
   var v = widget.validate;
   if(!v) return true;
   widget._hasBeenBlurred = true;
   if(!widget.validate()) {
     canNavigate = false;
   }
};
dojo.forEach(mytab1.getChildren(), highlight);
if(canNavigate) {
   dijit.byId("tc").selectChild("cp2");
}

完整示例: - http://jsfiddle.net/ZtzTE/29/