我在我的页面中使用了AngularJS和AngularJS bootstrap。我有一个日期选择器指令,如下所示:
<div class="form-group {{dateStatus.class}}">
<p class="input-group">
<input type="text" id="inpDate" class="form-control"
datepicker-popup="dd-MMMM-yyyy" ng-model="task.date"
is-open="datePickerStatus.isOpen" min-date="minDate"
datepicker-options="dateOptions" ng-required="true"
close-text="Close" placeholder="Due date"
ng-change="checkDateValidity()"
/>
<span class="input-group-btn">
<button type="button" class="btn btn-default"
ng-click="openDatePicker($event)"
>
<i class="glyphicon glyphicon-calendar"></i>
</button>
</span>
</p>
</div>
要验证日期输入,在我的控制器中我有以下功能:
$scope.checkDateValidity = function(){
var date,
isValid,
taskDate;
taskDate = $scope.task.date;
date = new Date(taskDate);
isValid = !isNaN(date);
if(isValid) {
$scope.addButtonState.isOk = true;
$scope.dateStatus.class = '';
}
else{
$scope.addButtonState.isOk = false;
$scope.dateStatus.class = 'has-error';
}
}
一切正常,可以检查插入的日期是否有效,但问题是当日期输入留空(或从有效状态更改为空白)
我希望它也可以被接受,但由于空输入和无效日期都是undefined
我不知道如何在两种情况之间声明。
我还想过直接读取输入文本:
document.getElementById('inpDate').value
但是当值改变时会触发ng-change,并且我留下了之前没用的前一个值......
感谢您的时间和回应。
答案 0 :(得分:7)
更好的验证方法是使用指令添加验证规则。
.directive("validateDate", function() {
return {
require: 'ngModel',
link: function(scope, elm, attrs, ctrl) {
ctrl.$validators.validateDate = function(modelValue, viewValue) {
if(!isNaN(modelValue) || ctrl.$isEmpty(modelValue)){
return true;
}
return false;
};
}
};
})
然后你只需要在输入标签中添加validate-date
,验证会将输入标记为有效,如果是!isNaN(当日期是数字或为空时)
答案 1 :(得分:2)
您可以通过将验证程序回调绑定到#inpDate
和change
事件来轻松验证keyup
值,然后当您的回调触发时,您可以检查输入的有效性。
$timeout(function(){
angular
.element(document.getElementById('inpDate'))
.bind('keyup change', function(){
var inputValue,
customDate,
isValid;
inputValue = this.value;
if(inputValue != ''){
customDate = new Date(inputValue);
isValid = !isNaN(customDate);
if(isValid){
console.log('Valid');
// do something
}
else{
console.log('Invalid');
// do something else
}
}
else{
console.log('Empty');
// do something else
}
});
}, 400);
请确保您已在控制器中注入$timeout
。
答案 2 :(得分:-1)
如果您想验证,那么您可以使用
if(document.getElementById('inpDate').value === "" ){
$scope.addButtonState.isOk = true;
$scope.dateStatus.class = '';
}
这是$scope.checkDateValidity
函数