使用带有此属性的ui-bootstrap附加到对话框上的ok/save按钮。 第一次创建对话框时,它会按照预期的方式专注于按钮。 每隔一段时间它都不起作用。为什么这只在第一次显示对话框时才起作用?
.directive('autoFocus', function($timeout) {
return {
restrict: 'AC',
link: function(_scope, _element) {
$timeout(function(){
_element[0].focus();
}, 0);
}
};
});
模态模板看起来是这样的(这是来自迈克尔·康罗伊的角对话框的服务):
<div class="modal" ng-enter="" id="errorModal" role="dialog" aria-Labelledby="errorModalLabel">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header dialog-header-error">
<button type="button" class="close" ng-click="close()">×
</button>
<h4 class="modal-title text-danger"><span class="glyphicon glyphicon-warning-sign"></span> Error</h4>
</div>
<div class="modal-body text-danger" ng-bind-html="msg"></div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" autoFocus ng-click="close()">Close</button>
</div>
</div>
</div>
</div>
首次将重点转移到关闭按钮没有问题。之后,焦点停留在原来的位置。
我试图处理一个重复启动这个错误对话框的回车键按钮,我真的需要把焦点从对话框的下面移开。
啊,对,可能与http://www.w3schools.com/tags/att_input_autofocus.asp发生冲突 – maurycy
来自[docs](https://docs.angularjs.org/guide/directive): '最佳实践:为了避免与未来标准的冲突,最好在自己的指令名称前加上前缀。例如,如果您创建了指令,那么如果HTML7引入了相同的元素,则会出现问题。两个或三个字母的前缀(例如btfCarousel)运作良好。同样,不要用ng加前缀自己的指令,否则它们可能会与未来版本的Angular中包含的指令冲突。 ' –
przno