angularjs指令中的Javascript事件问题
Javascript event issue inside angularjs directive
我一直在做一个简单的指令,一个HTML表单比较在两个不同的下拉框(一个月和一个日期)选择的日期与当前日期和创建和错误的情况下,在表单中的日期比当前老。它的工作几乎很好,然而,因为我使用Javascript的事件"改变",当我通过"tab"键进入下拉菜单,并按下向上和向下箭头键来改变下拉菜单内的值时,当我第二次这样做时,事件不会触发,只有当我第二次这样做时。
使用不同的Javascript事件并没有真正帮助,而且我不能使用ngModelController功能,因为该指令位于包含两个下拉框的div中。
有人有关于如何解决这个问题的线索,或者知道和替代方法来做指令?
JSFiddle
app.directive( 'validateExpirationDate', [function() {
return {
link : function (scope, element, attrs) {
var select = angular.element(element.find('select'));
var dateYear = new Date().getFullYear();
var dateMonth = new Date().getMonth();
dateMonth += 1;
var validDate=true;
function checkDate() {
alert('I have changed');
validDate=true;
if (scope.expMonth != null && scope.expYear != null) {
if (dateYear >= scope.expYear && dateMonth > scope.expMonth) {
validDate=false;
}
}
scope.$digest(scope.myForm.month.$setValidity('invalidDate', validDate));
};
select.on('change', checkDate);
}
};
}]);
Select(和大多数其他输入)带有data-ng-change,它将在任何更改时触发。因此,你可以这样做,而不是自己编写on change事件:
<select name="month" ng-model="expMonth" data-ng-change="checkDate()">
然后在你的代码中:
scope.checkDate = function(){
alert('I have changed');
validDate=true;
if (scope.expMonth != null && scope.expYear != null) {
if (dateYear >= scope.expYear && dateMonth > scope.expMonth) {
validDate=false;
}
}
scope.myForm.month.$setValidity('invalidDate', validDate)
};
jsFiddle: http://jsfiddle.net/78teb/
相关文章:
- 剑道MVC图表-渲染事件问题
- KineticJS鼠标事件问题
- ASP.NET MVC5 jQuery FullCalendar获取事件问题
- 选择标记更改事件问题
- 旋转木马动画事件问题
- 通过防止窗口事件问题防止双重提交
- PhoneGap 在应用程序浏览器加载停止事件问题
- 版式中的占位符文本回退事件问题
- KineticJS中的鼠标悬停事件问题
- 如果 Div 放置在 img 标记的顶部,则不会在 Div 上触发鼠标关闭事件 - 问题仅在 IE 中
- jquery 的鼠标事件问题
- Yii颜色选择器更改事件问题
- 表单验证事件问题
- struts2与jquery单选按钮事件问题
- Datatable操作列和jquery点击事件问题
- Onkeyup或onkeypress javascript事件问题-密码状态更新
- 如何解决jquery中的窗口加载事件问题
- iPhone上的Three.js项目-事件问题(选择和拖动对象)
- jQuery event. stoppropagation()和事件问题
- 谷歌地图javascript事件问题