【发布时间】:2015-07-11 10:17:59
【问题描述】:
我创建了一个简单的指令,它在输入上触发焦点事件以显示工具提示
.directive('tooltipValidationObserver', ['$timeout', function($timeout) {
return {
restrict: 'A',
require: '?ngModel',
link: function($scope, element, attrs, ngModel) {
$scope.$watch(function() { return ngModel.$invalid; }, function(newVal, oldVal) {
$timeout(function() {
$('#' + attrs.id).trigger('focus');
});
});
}
}
}])
如果我使用 attrs.id 效果很好,但如果我想执行
$(element).trigger('focus')
元素未定义,当在链接函数中时,它是在链接阶段定义的......并且在监视函数中未定义。为什么?在 watch 函数中,我可以获得所有可用的变量(例如 $scope、attrs、ngModel),但不能获得元素..
【问题讨论】:
-
可能不相关,但您只需要
element.trigger('focus')。element已经是一个 jQuery 对象。 -
你试过
console.log()element里面的link函数作为console.log(element)吗? -
是的,当然,谢谢,我忘了那个元素已经是 jquery 对象了
-
K.Toress,是的!当我尝试将它记录到控制台时,该变量存在。在我在代码中的 chrome 开发人员工具中设置断点以查看该变量之前,它是未定义的。所以,现在我不明白为什么 chrome 开发人员工具中的该变量仅可用如果我使用它。我的意思是当我在内部 $watch 函数中使用断点执行调试时。魔术。
-
@champion 我以前也遇到过这个问题,这可能会令人沮丧。看看这个解释stackoverflow.com/questions/28388530/…
标签: angularjs angularjs-directive