3

有什么方法可以循环遍历 dijit 表单中的所有 dijit 字段并打印出它们是否有效。我只问是因为我的“onValidStateChange”功能禁用了我的提交按钮,我不知道为什么它不会重新启用它。

4

2 回答 2

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);
于 2011-10-05T12:20:07.897 回答
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/

于 2013-08-24T10:41:02.093 回答