在 ui-bootstrap 模式中按回车键触发确定点击
Trigger OK click by pressing enter in ui-bootstrap modal
我有一个简单的 ui-bootstrap 模式,其模板如下:
<div class="modal-header">
<h3 class="modal-title">{{title}}</h3>
</div>
<div class="modal-body">
{{body}}
</div>
<div class="modal-footer">
<button class="btn btn-default"
ng-click="cancel()">
Cancel
</button>
<button class="btn btn-primary"
ng-click="ok()">
OK
</button>
</div>
模态框的默认行为是,如果我按 Escape 键,模态框将关闭。同样,我希望在按下 Enter 时触发 ok() 方法。我该怎么做?
感谢 Diana R 引导我得出这个答案:
我可以使用 ng-enter 指令,如下所述:https://gist.github.com/EpokK/5884263
这将允许我的模式监听 Enter 键。但是焦点需要在模式中才能工作。所以我还创建了一个指令,我称之为 focused:
angular.module('webApp').directive('focused', function ($timeout, $parse) {
return {
link: function ($scope, element, attributes) {
var model = $parse(attributes.focused);
$scope.$watch(model, function (value) {
if (value === true) {
$timeout(function () {
element[0].focus();
});
}
});
// set attribute value to 'false' on blur event:
element.bind('blur', function () {
if (model && model.assign) {
$scope.$apply(model.assign($scope, false));
}
});
}
};
});
然后我更新模态模板,使其看起来像这样:
<div ng-enter="ok()">
<div class="modal-header">
<h3 class="modal-title">{{title}}</h3>
</div>
<div class="modal-body">
{{body}}
</div>
<div class="modal-footer">
<button class="btn btn-default"
ng-click="cancel()">
Cancel
</button>
<button class="btn btn-primary"
focused="true"
ng-click="ok()">
OK
</button>
</div>
</div>
由于 focused="true" 指令在 div 与 ng-enter 指令的包装内,回车键将触发 ok() 方法。
如果您正在寻找更多 'out-of-the box' 解决方案,我建议使用 ng-focus-if。
它的功能要强大得多,但在这里它可以用来聚焦所需的元素。只需标记确认按钮:
<div class="modal-footer">
<button class="btn btn-default" ng-click="$dismiss()">
Cancel
</button>
<button class="btn btn-primary" ng-click="$close()" focus-if>
OK
</button>
</div>
现在单击 space
或 enter
将触发“确定”按钮。您也可以使用 tab
按钮导航。
我有一个简单的 ui-bootstrap 模式,其模板如下:
<div class="modal-header">
<h3 class="modal-title">{{title}}</h3>
</div>
<div class="modal-body">
{{body}}
</div>
<div class="modal-footer">
<button class="btn btn-default"
ng-click="cancel()">
Cancel
</button>
<button class="btn btn-primary"
ng-click="ok()">
OK
</button>
</div>
模态框的默认行为是,如果我按 Escape 键,模态框将关闭。同样,我希望在按下 Enter 时触发 ok() 方法。我该怎么做?
感谢 Diana R 引导我得出这个答案:
我可以使用 ng-enter 指令,如下所述:https://gist.github.com/EpokK/5884263
这将允许我的模式监听 Enter 键。但是焦点需要在模式中才能工作。所以我还创建了一个指令,我称之为 focused:
angular.module('webApp').directive('focused', function ($timeout, $parse) {
return {
link: function ($scope, element, attributes) {
var model = $parse(attributes.focused);
$scope.$watch(model, function (value) {
if (value === true) {
$timeout(function () {
element[0].focus();
});
}
});
// set attribute value to 'false' on blur event:
element.bind('blur', function () {
if (model && model.assign) {
$scope.$apply(model.assign($scope, false));
}
});
}
};
});
然后我更新模态模板,使其看起来像这样:
<div ng-enter="ok()">
<div class="modal-header">
<h3 class="modal-title">{{title}}</h3>
</div>
<div class="modal-body">
{{body}}
</div>
<div class="modal-footer">
<button class="btn btn-default"
ng-click="cancel()">
Cancel
</button>
<button class="btn btn-primary"
focused="true"
ng-click="ok()">
OK
</button>
</div>
</div>
由于 focused="true" 指令在 div 与 ng-enter 指令的包装内,回车键将触发 ok() 方法。
如果您正在寻找更多 'out-of-the box' 解决方案,我建议使用 ng-focus-if。
它的功能要强大得多,但在这里它可以用来聚焦所需的元素。只需标记确认按钮:
<div class="modal-footer">
<button class="btn btn-default" ng-click="$dismiss()">
Cancel
</button>
<button class="btn btn-primary" ng-click="$close()" focus-if>
OK
</button>
</div>
现在单击 space
或 enter
将触发“确定”按钮。您也可以使用 tab
按钮导航。