【问题标题】:Foundation 4.3.2 Abide Doesn't Validate CheckboxesFoundation 4.3.2 Abide 不验证复选框
【发布时间】:2014-05-30 13:38:34
【问题描述】:

Zurb Foundation 4.3.2 遵守验证不验证复选框。

虽然编写自己的自定义验证相对容易,但如果我可以更新库以进行验证会更好,这样我工作的这个庞大机构中的其他用户/开发人员也可以使用这些工具,而无需不得不去挖掘自定义脚本。

如何更新 Abide 以使复选框验证工作,而无需更新到 Foundation 5?——这个网站属于一个庞大的组织,升级需要几个月、人力和大量预算,我们没有。

下面是示例代码:

<form id="form-name" data-abide="ajax">
    <label for="print-checkbox"><input id="print-checkbox" type="checkbox" required name="print-checkbox"> <strong>Blah Blah Blah Label Text</strong>
        <small class="error"><span class="icon-exclamation-sign"></span> A warning that only appears if the form doesn't validate.</small>
    </label>
    <input id="print-submit" type="submit" value="Submit" class="button small radius">
</form>

<script type="text/javascript">
$('#form-name').on('valid invalid submit', function (e) {
    e.stopPropagation();
    e.preventDefault();
    if(e.type === "valid") {
        alert("returns valid");
    }
    return false;
});
</script>

【问题讨论】:

    标签: javascript validation checkbox zurb-foundation


    【解决方案1】:

    当然,起草这个问题让我开始思考一些解决方案,并且我想出了一个可行的解决方案。

    首先,I integrated in a fix for Abide 4.3.2 that fixed the incorrect validation of hidden required fields.

    接下来,我添加了一些逻辑来支持复选框。

    最后,我复制了无线电验证,做了一些细微的改动,瞧!复选框验证。

    这是上面 GIT 链接中的函数,已修改为包含复选框。注意添加is_checkbox...} else if (is_checkbox &amp;&amp; required) {

    check_validation_and_apply_styles : function (el_patterns) {
      var count = el_patterns.length,
          validations = [];
    
      for (var i = count - 1; i >= 0; i--) {
        var el = el_patterns[i][0],
            required = el_patterns[i][2],
            value = el.value,
            is_radio = el.type === "radio",
            is_checkbox = el.type === "checkbox",
            valid_length = (required) ? (el.value.length > 0) : true,
            isVisible = $(el).is(":visible");
        if (isVisible) {
            if (is_radio && required) {
              validations.push(this.valid_radio(el, required));
            } else if (is_checkbox && required) {
              validations.push(this.valid_checkbox(el, required));
            } else {
              if (el_patterns[i][1].test(value) && valid_length ||
                !required && el.value.length < 1) {
                $(el).removeAttr('data-invalid').parent().removeClass('error');
                validations.push(true);
              } else {
                $(el).attr('data-invalid', '').parent().addClass('error');
                validations.push(false);
              }
            }
        }
      }
    
      return validations;
    },
    

    然后在下面,我复制了 valid_radio : function (el, required) 并将其重新用于复选框:

    valid_radio : function (el, required) {
      var name = el.getAttribute('name'),
          group = document.getElementsByName(name),
          count = group.length,
          valid = false;
    
      for (var i=0; i < count; i++) {
        if (group[i].checked) valid = true;
      }
    
      for (var i=0; i < count; i++) {
        if (valid) {
          $(group[i]).removeAttr('data-invalid').parent().removeClass('error');
        } else {
          $(group[i]).attr('data-invalid', '').parent().addClass('error');
        }
      }
    
      return valid;
    },
    
    valid_checkbox : function (el, required) {
      var name = el.getAttribute('name'),
          group = document.getElementsByName(name),
          count = group.length,
          valid = false;
      for (var i=0; i < count; i++) {
        if (group[i].checked) valid = true;
      }
    
      for (var i=0; i < count; i++) {
        if (valid) {
          $(group[i]).removeAttr('data-invalid').parent().removeClass('error');
        } else {
          $(group[i]).attr('data-invalid', '').parent().addClass('error');
        }
      }
    
      return valid;
    } 
    

    巴姆。使用 Zurb Foundation Abide 4.2.3 验证复选框

    【讨论】:

    • 正是我需要的。你是一个了不起的人。 :)
    • @edcincy 很高兴为您提供帮助!如果这对您有帮助,请务必点赞!
    • 我不得不问这个问题似乎很神奇,但是在 5.4.7 中是否有使用 Abide 的复选框验证 - 特别是对于没有其他验证的表单中的单个复选框?这似乎是个问题。
    • @cbmtrx Foundation 5 使用 abide,并且具有复选框验证功能。查看此页面,您可以在顶部看到他们的示例:foundation.zurb.com/docs/components/abide.html
    • 我们发现这是一个 DOM 结构/优先级问题:我们发现我们必须将 Abide 验证(针对此特定表单)放在 $(document).foundation('reflow'); 语句之后。无论出于何种原因,这解决了我们的问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多