【问题标题】:Close date picker when clicking to next date picker AngularJS单击下一个日期选择器AngularJS时关闭日期选择器
【发布时间】:2014-10-02 12:18:55
【问题描述】:

我的表单中有多个日期选择器。默认情况下,这些是关闭的,一旦选择了日期,它们就会再次关闭。另外,即使我不选择日期,只是在外面点击,它也会自动关闭。

但是,当我打开第一个日期并且不点击外部或选择某个日期然后简单地打开第二个日期选择器时,第一个日期选择器保持打开状态。

我怎样才能避免这种情况,并确保即使点击第二个日期选择器,第一个日期选择器也会自动关闭?

           <button type="button" id="dateButton" class="btn btn-default" ng-click="open($event,'dt')" >
          <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="dt"
                 is-open="datepicker.dt" min-date="minDate" max-date="maxDate" show-weeks="false" ng-required="true"
                 datepicker-options="dateOptions" show-button-bar="false" readonly="readonly"/>
        </button>

        <button type="button" id="dateButton" class="btn btn-default" ng-click="open($event,'dt2')" >
          <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="dt2"
                 is-open="datepicker.dt2" min-date="minDate" max-date="maxDate" show-weeks="false" ng-required="true"
                  show-button-bar="false" readonly="readonly"/>
        </button>

_

$scope.datepicker={
  dt:false,
  dt2:false
};
$scope.open = function($event,which) {
  $event.preventDefault();
  $event.stopPropagation();

  $scope.datepicker[which] = true;
};
$scope.format = 'dd-MMM-yyyy';

这就是我所做的:plnkr.co/edit/o9I3cRej9I7rZUcPpz6O?p=preview 你看看如果你点击一个日期选择器,然后只需点击另一个,第一个不会关闭

【问题讨论】:

    标签: javascript angularjs twitter-bootstrap date datepicker


    【解决方案1】:

    您在 is-from 属性中使用了相同的名称,即“datepicker.dt”。 然后你将 'dt' 传递给你的 open 函数。因此,如果您有多个日期选择器的相同 html 代码,那么您将一起打开。

    你需要为不同的datePickers定义不同的is-open名字,为每个datePickers定义不同的open函数更方便。那么您只需将关联的 datePicker 函数的 is-open 属性设置为 true 即可。

    	  $scope.openDt1 = function($event) {
    		    $event.preventDefault();
    		    $event.stopPropagation();
    
    		    $scope.datepicker.dt1 = true;
    		  };
    
    	  $scope.openDt2 = function($event) {
    		    $event.preventDefault();
    		    $event.stopPropagation();
    
    		    $scope.datepicker.dt1 = true;
    		  };
        <button type="button" id="dateButton" class="btn btn-default" ng-click="openDt1($event)">
              <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="dt"
                     is-open="datepicker.dt1" min-date="minDate" max-date="maxDate" show-weeks="false" ng-required="true"
                     datepicker-options="dateOptions" show-button-bar="false" readonly="readonly"/>
        </button>
    
        <button type="button" id="dateButton" class="btn btn-default" ng-click="openDt2($event)">
              <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="dt"
                     is-open="datepicker.dt2" min-date="minDate" max-date="maxDate" show-weeks="false" ng-required="true"
                     datepicker-options="dateOptions" show-button-bar="false" readonly="readonly"/>
        </button>

    【讨论】:

    • 对不起...我没有正确解释我的行为。这是我所做的:plnkr.co/edit/o9I3cRej9I7rZUcPpz6O?p=preview 你会看到如果你单击一个日期选择器,然后只需单击另一个,第一个不会关闭
    • 原因是 datepicker.dt1 和 datepicker.dt2 保持为真。打开dt1时,需要将所有datePickers的is-open属性设置为false,只设置dt1.is-open为true。
    • 抱歉我的回复晚了。我上周病了。你能给我一些进一步的解释吗?我似乎不明白如何更改功能。
    • 是的,我做到了。你给了一些很好的提示,所以它有很大帮助。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2018-07-27
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多