【问题标题】:Check all fields in a dijit form检查 dijit 表单中的所有字段
【发布时间】:2011-10-03 13:17:33
【问题描述】:

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

【问题讨论】:

    标签: dojo dijit.form


    【解决方案1】:

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

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

    【讨论】:

    • 有没有办法指定可以连接哪些子元素?假设您有一个带有不同窗格的向导表单,并且您不想验证整个表单,但是您想验证某些元素。这是如何实现的?
    • @devdar 我已经在下面的答案和你原来的问题中更新了特殊情况:) 看看 - stackoverflow.com/questions/23033196/…
    【解决方案2】:

    默认情况下,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/

    【讨论】:

    • 我最终决定从 dojo 迁移到 jQuery。我发现我不得不用 dojo 破解很多东西 :(
    • 有没有办法指定可以连接哪些子元素?假设您有一个带有不同窗格的向导表单,并且您不想验证整个表单,但是您想验证某些元素。这是如何实现的?
    猜你喜欢
    • 2012-06-21
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 2012-10-02
    • 1970-01-01
    • 2013-09-12
    • 2016-10-09
    相关资源
    最近更新 更多