【发布时间】:2011-10-03 13:17:33
【问题描述】:
有什么方法可以循环遍历 dijit 表单中的所有 dijit 字段并打印出它们是否有效。我只是问,因为我的“onValidStateChange”功能禁用了我的提交按钮,我不知道为什么它不会重新启用它。
【问题讨论】:
标签: dojo dijit.form
有什么方法可以循环遍历 dijit 表单中的所有 dijit 字段并打印出它们是否有效。我只是问,因为我的“onValidStateChange”功能禁用了我的提交按钮,我不知道为什么它不会重新启用它。
【问题讨论】:
标签: dojo dijit.form
您可以使用 dijit.form.Form 的getChildren() 获取表单中的所有子小部件,然后使用isValid() 来检查该字段是否有效;
var form, iterFunction;
form = dijit.byId('form');
iterFunction = function(widget){
console.log(widget.isValid());
};
dojo.forEach(form.getChildren(), iterFunction);
【讨论】:
默认情况下,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");
}
【讨论】: