是否可以使用Parsley.js指定要验证的特定日期范围

时间:2014-01-02 17:31:23

标签: javascript jquery parsley.js

我使用的是设置范围为1999:2005的日期选择器,但我只希望08-01-199907-31-2005有效,所以如果用户在这些日期之外选择,我就不会我希望我的表单提交但是提示用户添加正确的日期,我正在使用parsley.js并且想知道是否可以在那里添加日期范围来处理这个问题?如果没有,我可以添加自己的验证。

2 个答案:

答案 0 :(得分:2)

您可以使用parsley-beforedate="#elem"parsley-afterdate="#elem"来伪造它,以引用隐藏的,未提交的字段,这些字段中包含这些边界值。

或者,在JavaScript中编写一个自定义验证器,您可以将这些验证器应用于这些日期字段以及标准日期验证。这是我为防止将来约会而写的。您可以根据日期范围验证调整它(注意:它使用jqueryui中的datepicker例程)。

$( '#formUpdate' ).parsley( {
    validateIfUnchanged: true,
    validators: {
        // checks that a date is not in the future
        // try needed because datepicker can throw an exception
        notfuturedate: function ( fieldValue ) {
            try {
                var d1 = $.datepicker.parseDate("dd/mm/yy", fieldValue); // convert string to date
            } catch (e) {
                // if date is invalid, let the date check routine report it
                return true;
            }
            var d0 = new Date(); // today
            return (d1<=d0);
        }
    }
 // some other irrelevant lines omitted
});

在声明了这个新的验证器后,您只需将parsley-notfuturedate="true"放在输入字段上,它就像内置的欧芹验证一样。

此外,如果您使用类似jqueryUI的日期选择器,则可以使用选项(minDate,maxDate)来限制可用范围。

答案 1 :(得分:1)

<input type="text" placeholder="MM/DD/YYYY" required="" data-parsley-required-message="Date is required." data-parsley-pattern="^[0-9]{2}/[0-9]{2}/[0-9]{4}$" data-parsley-pattern-message="Invalid Date." data-parsley-maxdate="12/31/2019" data-parsley-mindate="01/01/2018" data-date-format="MM/DD/YYYY">
<script type="text/javascript">
    window.ParsleyValidator
        .addValidator('mindate', function(value, requirement) {
            // is valid date?
            var timestamp = Date.parse(value),
                minTs = Date.parse(requirement);

            return isNaN(timestamp) ? false : timestamp >= minTs;
        }, 32)
        .addMessage('en', 'mindate', '<div class="date-error">Date should be greater than or equal to %s</div>');

    window.ParsleyValidator
        .addValidator('maxdate', function(value, requirement) {
            // is valid date?
            var timestamp = Date.parse(value),
                minTs = Date.parse(requirement);

            return isNaN(timestamp) ? false : timestamp <= minTs;
        }, 32)
        .addMessage('en', 'maxdate', '<div class="date-error">Date should be less than or equal to %s </div>');
</script>