【问题标题】:Open datepicker manually angular手动打开日期选择器
【发布时间】:2016-12-12 10:58:37
【问题描述】:

我无法以角度打开日期选择器。目标是获取日期范围,因此当我更改 dateStart 时,第二个日历应该会自动打开,但它不会。

我错过了什么?

已修复

似乎是 open-on-focus 指令的问题

工作 jsfiddle : http://jsfiddle.net/9dfLawtz/


var app = angular.module('myApp', ['ngMaterial']);

app.controller('MyCtrl', ['$scope','$timeout', function MyCtrl ($scope,$timeout) {

$scope.dateFormat = '';
$scope.dateEnd = '';
$scope.dateStart = '';

$scope.changeDateStart = function(){
  var myEl = angular.element( document.querySelector( '#dateEnd' ) );
  myEl.focus();
  $scope.test = true;
  myEl.parent().find("input").focus();
}

}]);

HTML:

<div ng-app="myApp">
<h2>Focus on each input and press 'enter' to see its name</h2>
<div ng-controller="MyCtrl">
<button ng-click="openDatePicker()">
Click 
</button>
 <md-datepicker id="dateStart" 
        ng-model="dateStart" ng-change="changeDateStart()">
    </md-datepicker>
            <md-datepicker id="dateEnd" 
        ng-model="dateEnd" md-placeholder="dateEnd" md-open-on-focus>
    </md-datepicker>
    <p>input : {{ dateFormat }}</p>
</div>

http://jsfiddle.net/hx5g5g95/

【问题讨论】:

  • 你的小提琴看起来不错。我看不出有什么问题。在 safari 和 chrome 中测试
  • 将日期改成第一个日历时第二个日历不打开,在chrome 55、safari、firefox上测试

标签: javascript angularjs datepicker angular-material


【解决方案1】:

您的代码有几个问题:

1- 您在超时中使用的 id 选择器未在您的元素中定义。因此,您需要将 id="dateEnd" 添加到元素中才能正常工作:

var myEl = angular.element( document.querySelector( '#dateEnd' ) );

2- 您将一个名为 dateEndOpened 的变量设置为 true 并希望打开第二个变量,而您在 ng-focus 中使用了相同的变量,这是错误的,因为 ng-focus 需要 function 而不是变量.

有关如何处理此问题的更多信息,请参阅此issue,但简短版本是添加

ng-focus="open()"

到您的第二个日期选择器。

【讨论】:

  • 错误的复制/粘贴,好像 open() 什么都没做
  • 还有一个如何使用 github 问题页面上的指令来实现这一点的示例,如果您愿意,可以按照该指令进行操作,但是由于问题已关闭,因此应该可以使用
  • 还是一样,当我关闭第一个日历时,第二个日历不会自动显示
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2012-12-19
相关资源
最近更新 更多