即使从中选择另一个日期,JQueryUI DatePicker 也始终将今天的日期显示为选中状态

Posted

技术标签:

【中文标题】即使从中选择另一个日期,JQueryUI DatePicker 也始终将今天的日期显示为选中状态【英文标题】:JQueryUI DatePicker always displays todays date as selected even when selecting another date from it 【发布时间】:2018-05-13 00:38:17 【问题描述】:

我同时使用 AngularJS 和 JQuery UI DatePicker 以允许用户选择一个日期,我在同一页面上有两个日期。

我有一个自定义指令来处理 jQuery 和 AngularJS 之间的接口:

.directive('mydatepicker', function ($parse) 
        return 
            restrict: 'A',
            require: 'ngModel',
            link: function (scope, element, attrs, ctrl) 
                var ngModel = $parse(attrs.ngModel);
                $(function () 
                    element.datepicker(
                        showOn: "both",
                        changeYear: true,
                        changeMonth: true,
                        dateFormat: 'dd/mm/yy',
                        onSelect: function (date, inst) 
                            scope.$apply(function (scope) 
                                ngModel.assign(scope, date);
                            );
                        
                    );
                );
            
        ;
    )

我的 html 如下所示:

<input type="text" ng-model="mjaController.tempFiltering.fromDate" mydatepicker />
<input type="text" ng-model="mjaController.tempFiltering.toDate" mydatepicker />

只是为了证明ngModel的值,我也直接打印值:

<pre>mjaController.tempFiltering.fromDate</pre>
<pre>mjaController.tempFiltering.toDate</pre>

但是,ngModel 中的值是什么,或者我直接从 datepicker 中选择什么日期并不重要:datepicker 总是 显示今天的日期 - 但是 ngModel 是更新到所选日期

datepicker 可以作为标准 jQuery 正常工作,但是一旦我将它绑定到 AngularJS 指令,它似乎会破坏它。

请注意,我几乎完全从 here 复制了代码(跳过了 maxDate 和 dateRange 选项),但它不起作用,但在该示例中效果很好。

【问题讨论】:

【参考方案1】:

我对角度知之甚少。无论如何,我对您发布的小提琴进行了一些更改,希望可以建议您解决问题的正确方法。 希望这会有所帮助。

http://jsfiddle.net/xB6c2/1155/

var myApp = angular.module('myApp', []);
      
myApp.directive('myDatepickerfrom', function ($parse) 
    return function (scope, element, attrs, controller) 
        var ngModel = $parse(attrs.ngModel);
        $(function()
            element.datepicker(
                showOn:"both",
                changeYear:true,
                changeMonth:true,
                dateFormat:'yy-mm-dd').on('change', function(d,i)
                	$('#dp2').datepicker("option","minDate",$('#dp1').val());
                  scope.$apply(function(scope)
                        ngModel.assign(scope,$('#dp1').val());
                    );
                 
                );
        );
    
).directive('myDatepickerto', function ($parse) 
    return function (scope, element, attrs, controller) 
        var ngModel = $parse(attrs.ngModel);
        $(function()
            element.datepicker(
                showOn:"both",
                changeYear:true,
                changeMonth:true,
                dateFormat:'yy-mm-dd').on('change', function()
                	$('#dp1').datepicker("option","maxDate",$('#dp2').val());
                  scope.$apply(function(scope)
                        ngModel.assign(scope,$('#dp2').val());
                    );
                );
        );
    
);


function MyCtrl($scope) 

    $scope.userInfo = 
        person: 
            firstDate: '2017-11-10',
            lastDate: '2017-11-20'
        
    ;
    
        
<link href="https://code.jquery.com/ui/1.12.0/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.17/angular.min.js"></script>

<div ng-app="myApp" ng-controller="MyCtrl">

<input id="dp1" type="text" ng-model="userInfo.person.firstDate" name="firstDate" my-datepickerfrom/>

    <pre>userInfo.person.firstDate</pre>
    <hr />
    <input id="dp2" type="text" ng-model="userInfo.person.lastDate" name="lastDate" my-datepickerto/>

    <pre>userInfo.person.lastDate</pre>

</div>

【讨论】:

以上是关于即使从中选择另一个日期,JQueryUI DatePicker 也始终将今天的日期显示为选中状态的主要内容,如果未能解决你的问题,请参考以下文章

带有隐藏输入的 jqueryui datepicker

为啥 jQuery UI 的日期选择器会与动态 DOM 发生冲突?

Chrome type="date" 和 jquery ui 日期选择器冲突

JQuery UI日期选择器结束日期开始日期后1天

jQuery UI 日期选择器范围

格式化 jQuery UI 日期选择器