2014-01-21 36 views
1

我有3个电话字段,并且至少必须填写其中一个字段。问题是,当字段为空时,parsley验证不起作用,所以它不显示任何错误。即使字段为空,我如何触发验证?空字段的触发验证

这里是HTML:

<form parsley-validate id="demo-form"> 
Phone1 <input type="text" name="phone1" id="phone1" /><br> 
Phone2 <input type="text" name="phone2" id="phone2" /><br> 
Phone3 <input type="text" name="phone3" id="phone3" parsley-phones /><br> 
<input type="button" value="submit" onclick="$('#demo-form').parsley('validate');"> 
</form> 

这里是使用Javascript:

(function ($) { 
    window.ParsleyConfig = $.extend(true, {}, window.ParsleyConfig, { 
     validators: { 
      phones: function() { 
       return { 
        validate: function(val) { 
         if($("#phone1").val()=='' && $("#phone2").val()=='' && $("#phone3").val()=='') 
          return false; 
         else 
          return true; 
        } 
        , priority: 100 
       } 
      } 
     } 
     , messages: { 
       phones: "At least one phone number is required." 
     } 
    }); 
}(window.jQuery || window.Zepto)); 
+0

你需要指定'validateIfUnchanged:true'吗? – Turophile

+0

我添加了“validateIfUnchanged:true”,并且还添加了如下隐藏输入字段: It看起来并不高雅,但至少可以工作...... – ASH

+0

我用你的代码做了一个小提琴,但发现如果字段为空,parsley会跳过自定义字段验证。我可能会向开发人员提及这一限制。 – Turophile

回答

1

只需将属性“必需”添加到要阻止提交为空的每个输入。例如:

<input type="text" name="phone1" id="phone1" required /> 
+0

但是这意味着phone1始终是必需的。在我的情况下,只需要phone1,2或3。 – ASH

+0

这有助于简单验证空字段。不是OP而是我的简单得多。以上阅读可能也会起作用,但我没有测试它。快速和肮脏的上面为我工作。 –

1

你可能只需要一个特殊的属性data-parsley-validate-if-empty添加到输入。

这里是parsley.js源代码的相关部分:

// An empty optional field does not need validation 
needsValidation: function needsValidation(value) { 
    if ('undefined' === typeof value) value = this.getValue(); 

    // If a field is empty and not required, it is valid 
    // Except if `data-parsley-validate-if-empty` explicitely added, useful for some custom validators 
    if (!value.length && !this._isRequired() && 'undefined' === typeof this.options.validateIfEmpty) return false; 

    return true; 
}, 

和文档: http://parsleyjs.org/doc/#psly-usage-field 报价:

字段默认情况下,如果不要求它不进行验证和空。 通过添加data-parsley-validate-if-empty,如果字段为空,验证将完成,即使是 。有用的,如果你需要一些自定义验证器 检查某些字段为空时特定的。

+0

parsley v2提供的data-parsley-validate-if-empty可以正常工作。我上面的解决方案适用于仍在使用v1的人。 – ASH