Parsley Validator - 至少需要一个字段

Posted

技术标签:

【中文标题】Parsley Validator - 至少需要一个字段【英文标题】:Parsley Validator - At least one field is required 【发布时间】:2015-08-12 03:32:23 【问题描述】:

我的表单中有四个输入元素(即文本框)供用户输入不同的电话号码,即办公室、手机、家庭等。(这些输入字段不一定在一个 div/group 下)在提交之前,我想验证这些电话号码。条目并确保用户输入了至少一个电话号码。如果没有电话号码。字段有有效的条目我的表单不应该得到验证,也不应该发布。

我使用 ParsleyJS 库进行验证并使用 knockout.js。

我的 Razor 视图中有一个字段的以下代码(其余三个字段与此类似):

        <div class="col-md-3 clmargin">
            <div class="form-group col-md-4 zeropadding div2adjustments">
                @html.LabelFor(m => m.Handphone, new  @class = "fieldtext" )
            </div>
            <div class="col-md-8 ">
                <input type="text" class="form-control fieldtextinput input-sm" maxlength="10" minlength="8" data-parsley-type="digits"
                       data-bind="value:Handphone, disable:ViewMode() == 'View'" id="handphone">
            </div>
        </div>

我在上面的代码中给了我的输入,即“handphone”。

Javascript 代码:

$(document).ready(function () 
    $('#contact').parsley().subscribe('parsley:form:validate', function (formInstance) 

        // if one of these blocks is not failing do not prevent submission
        // we use here group validation with option force (validate even non required fields)
        if (document.getElementById("other").value == '' && document.getElementById("telephone").value == '' &&
            document.getElementById("office").value == '' && document.getElementById("handphone").value == '')
            // else stop form submission
            formInstance.submitEvent.preventDefault();
            // and display a gentle message
            $('.invalid-form-error-message')
                .html("Provide atleast one contact no")
                .addClass("filled");
            return;
        
        $('.invalid-form-error-message').html('');
        return;
    );
);

使用上面的脚本代码,它可以检测到无效的场景,但不会阻止表单提交。

我从here获取了上面的脚本代码

【问题讨论】:

你能添加你目前的代码吗?您面临的问题是什么? @milz 刚刚在帖子中添加了代码 sn-ps.. 【参考方案1】:

Parsley.js 中还没有简单的条件验证方法。您可以查看Marc's answer 了解更多信息。

您可能需要调整此代码以满足您的需要,但您可以执行以下操作 (jsfiddle):

<div class="invalid-form-error-message"></div>
<form id="demo-form">
    <input type="text" name="field1" required data-parsley-errors-messages-disabled />
    <input type="text" name="field2" required data-parsley-errors-messages-disabled />
    <input type="text" name="field3" required data-parsley-errors-messages-disabled />
    <input type="text" name="field4" required data-parsley-errors-messages-disabled />
    <input type="submit" />
</form>

<script>
$(document).ready(function() 
    $('#demo-form').parsley().subscribe('parsley:form:validate', function (formInstance) 
        // If any of these fields are valid
        if ($("input[name=field1]").parsley().isValid() || 
            $("input[name=field2]").parsley().isValid() || 
            $("input[name=field3]").parsley().isValid() || 
            $("input[name=field4]").parsley().isValid()) 
        
            // Remove the error message
            $('.invalid-form-error-message').html('');

            // Remove the required validation from all of them, so the form gets submitted
            // We already validated each field, so one is filled.
            // Also, destroy parsley's object
            $("input[name=field1]").removeAttr('required').parsley().destroy();
            $("input[name=field2]").removeAttr('required').parsley().destroy();
            $("input[name=field3]").removeAttr('required').parsley().destroy();
            $("input[name=field4]").removeAttr('required').parsley().destroy();

            return;
        

        // If none is valid, add the validation to them all
        $("input[name=field1]").attr('required', 'required').parsley();
        $("input[name=field2]").attr('required', 'required').parsley();
        $("input[name=field3]").attr('required', 'required').parsley();
        $("input[name=field4]").attr('required', 'required').parsley();

        // stop form submission
        formInstance.submitEvent.preventDefault();

        // and display a gentle message
        $('.invalid-form-error-message')
            .html("You must correctly fill the fields of at least one of these two blocks!")
            .addClass("filled");
        return;
    );
);
</script>

请注意,您需要将data-parsley-errors-messages-disabled 添加到您的输入中,因此您不会看到每个输入的错误消息。

【讨论】:

以上是关于Parsley Validator - 至少需要一个字段的主要内容,如果未能解决你的问题,请参考以下文章

Parsley 验证在表单加载并显示错误时立即开始

parsley.js 可选地验证数字输入

如何使用 Laravel 框架的 validator

Parsley JS 不等于多个 ID

即使 Parsley 验证失败,.submit() 也会始终执行

动态禁用禁用字段的 Parsley 验证