引导日期选择器和引导验证器

Posted

技术标签:

【中文标题】引导日期选择器和引导验证器【英文标题】:Bootstrap datepicker and bootstrap validator 【发布时间】:2014-10-21 14:52:03 【问题描述】:

我正在使用来自here 的引导日期选择器和来自here 的引导验证器。我也在使用引导程序 v3.1.1。

从日期选择器中选择日期后,验证器没有反应。它只在我使用键盘输入日期时起作用。

这是我的 html 代码:

<form id="myForm" method="POST"> 
   <div class="col-lg-3">
     <div class="form-group">
        <input name="endDate" type="text" class="datepicker form-control">
     </div>
   </div>
</form>

在我添加的 .js 文件中:

$(document).ready(function () 
  $('.datepicker').datepicker();
);

对于验证者:

$(document).ready(function () 
    $('#myForm').bootstrapValidator(
        feedbackIcons: 
            valid: 'glyphicon glyphicon-ok',
            invalid: 'glyphicon glyphicon-remove',
            validating: 'glyphicon glyphicon-refresh'
        ,
        fields: 
            endDate: 
                validators: 
                    date: 
                        format: 'DD/MM/YYYY',
                        message: 'The format is dd/mm/yyyy'
                    ,
                    notEmpty: 
                        message: 'The field can not be empty'
                    
                
            
        
    );
);

【问题讨论】:

您能告诉我们您使用的是哪两个插件吗?验证器很容易猜到,但如果您提到这两个插件,它将对您的帖子有所帮助。 对于验证,我使用 bootstrapValidator.min.js 版本 v0.5.0,构建于 2014-07-14,对于 datepicker,我使用 bootstrap-datepicker.js 版本 3.1.1,我使用 jquery 1.10.2 . 我的意思是提供插件页面的链接。例如。验证您是否使用此bootstrapvalidator.com?对于日期选择器,您是否使用此 vitalets.github.io/bootstrap-datepicker? 是的,我使用您提到的两个链接中的日期选择器和验证器。我使用来自eonasdan.github.io/bootstrap-datetimepicker 的日期时间选择器,我遇到了同样的问题。感谢您的回答。 【参考方案1】:

将 BootstrapValidator 与 Bootstrap-datetimepicker 或 Bootstrap-datepicker 一起使用时,您应该重新验证日期字段。

所以你应该添加这个:

1) 与 bootstrap-datetimepicker 一起使用:

$('.date')
    .on('dp.change dp.show', function(e) 
        // Revalidate the date when user change it
        $('#myForm').bootstrapValidator('revalidateField', 'endDate');
);

2) 与 bootstrap-datepicker 一起使用:

$('.datepicker')
    .on('changeDate show', function(e) 
        // Revalidate the date when user change it
        $('#myForm').bootstrapValidator('revalidateField', 'endDate');
);

请参阅datetimepicker example 了解更多信息。

【讨论】:

我有一个问题,data.bv.isValid() 总是false @YouYou 请创建一个新问题或在github.com/nghuuphuoc/bootstrapvalidator/issues/new的适当存储库上创建一个问题【参考方案2】:

不知何故,在选择日期后,datepicker() 失去了日期字段的焦点,并且没有一个验证器插件可以看到日期输入字段已填充(有效)。 总而言之,一个简单的 .focus() 就可以了。

$('#datefield').datepicker(
  //datepicker methods and settings here
).on('changeDate', function (e) 
  $(this).focus();    
);

【讨论】:

男孩,你简单而聪明的解决方案救了我一个严重的心脏烧伤病例!非常感谢! :) 其实我说得太早了。添加 .focus() 似乎可以解决问题,但实际上并没有解决 - 无效类已被删除,但验证插件仍然认为该字段无效! @RogerDodger,您使用的是哪个验证器插件? jqueryvalidation.org 上的那个 - 修复它的是@Sparky 在另一个 SO 线程上提供的解决方案,而不是 $(this).focus() ,我使用了 $(this).valid( )。成功了。【参考方案3】:

以上接受的答案对我不起作用。对我有用的方法非常简单。

$('#datefield').datepicker().on('changeDate', function (e) 
         $('#datefield').focus();
         $('#anyotherfield').focus();
         $('#datefield').focus();             
);

希望这会有所帮助!

【讨论】:

【参考方案4】:

对于大多数情况,上述答案应该有效,但如果最终这些答案对您不起作用,也可以试试这个:

$('.datepicker').change(function () 
        $(this).focus();
        $(this).blur();
    );

此脚本的主要思想是通过“设置”和“取消设置”焦点后强制验证。我知道这类似于模拟允许运行验证的正常事件。

祝你好运!

【讨论】:

【参考方案5】:
  $('[name="StartDate"]').datepicker(
            weekStart: 1,
            autoclose: true,
            todayHighlight: true
        ).on('changeDate', function (selected) 

            if ($('[name="StartDate"]').val() == '' || typeof 
    $('[name="StartDate"]').val() == "undefined")                 
                $('[name="EndDate"]').val('').datepicker('setStartDate', null);                
            
            else 
                $('[name="EndDate"]').val('').datepicker('setDate', new Date());
                $('[name="EndDate"]').datepicker('setStartDate', null);
                startDate = new Date(selected.date.valueOf());
                startDate.setDate(startDate.getDate(new Date(selected.date.valueOf())));
                $('[name="EndDate"]').datepicker('setDate', startDate);
                $('[name="EndDate"]').datepicker('setStartDate', startDate);
                $('[name="EndDate"]').val('').datepicker('update', '');
            
        );

        $('[name="StartDate"]').blur(function (selected) 
            if ($('[name="EndDate"]').val() != '' && $('[name="StartDate"]').val() == '' || typeof $('[name="StartDate"]').val() == "undefined")                 
                $('[name="StartDate"]').datepicker('setDate', new Date());
                $('[name="StartDate"]').val('').datepicker('setStartDate', null);
                $('[name="EndDate"]').datepicker('setDate', new Date());
                $('[name="EndDate"]').val('').datepicker('setStartDate', null);
            
        );

     $("#datepicker2").datepicker(
            autoclose: true,
            todayHighlight: true
        ).datepicker();

【讨论】:

Aey,介意添加一些描述。请参阅 do I write a good 回答,Welcome 到 Stack Overflow!【参考方案6】:

您还必须将最新的验证 CDN 包含到您的项目中:

https://cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.3/css/bootstrapValidator.css

https://cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.3/css/bootstrapValidator.min.css

https://cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.3/js/bootstrapValidator.js

https://cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.3/js/bootstrapValidator.min.js

【讨论】:

以上是关于引导日期选择器和引导验证器的主要内容,如果未能解决你的问题,请参考以下文章

引导日期时间选择器验证

Angularjs验证 - 无法识别引导日期选择器输入

引导日期选择器插件问题

在 laravel 4 中使用引导日期选择器时禁用昨天之前的日期

引导日期选择器禁用功能

Bootstrap 日期选择器和 moment.js jalali 日历