这里是一个angular.js指令,它可以使enter键转到下一个字段,其他答案的启发。这里有一些看起来可能有点奇怪的代码,因为我只使用了angular中打包的jQlite。我相信这里大部分功能在所有浏览器> IE8都能正常工作。
angular.module('myapp', [])
.directive('pdkNextInputOnEnter', function() {
var includeTags = ['INPUT', 'SELECT'];
function link(scope, element, attrs) {
element.on('keydown', function (e) {
if (e.keyCode == 13 && includeTags.indexOf(e.target.tagName) != -1) {
var focusable = element[0].querySelectorAll('input,select,button,textarea');
var currentIndex = Array.prototype.indexOf.call(focusable, e.target)
var nextIndex = currentIndex == focusable.length - 1 ? 0 : currentIndex + 1;
if(nextIndex >= 0 && nextIndex < focusable.length)
focusable[nextIndex].focus();
return false;
}
});
}
return {
restrict: 'A',
link: link
};
});
这是我在正在开发的应用程序中使用它的方法,只需在元素上添加
pdk-next-input-on-enter
指令即可。我正在使用条形码扫描器将数据输入到字段中,扫描器的默认功能是模拟键盘,在键入扫描条形码的数据后注入回车键。
这段代码有一个副作用(对我的用例来说是积极的),如果它将焦点移动到按钮上,回车键弹起事件将导致按钮的操作被激活。这对我的流程非常有效,因为我的标记中最后一个表单元素是一个按钮,我希望在通过扫描条形码“切换”所有字段后激活它。
<!DOCTYPE html>
<html ng-app=myapp>
<head>
<script src="angular.min.js"></script>
<script src="controller.js"></script>
</head>
<body ng-controller="LabelPrintingController">
<div class='.container' pdk-next-input-on-enter>
<select ng-options="p for p in partNumbers" ng-model="selectedPart" ng-change="selectedPartChanged()"></select>
<h2>{{labelDocument.SerialNumber}}</h2>
<div ng-show="labelDocument.ComponentSerials">
<b>Component Serials</b>
<ul>
<li ng-repeat="serial in labelDocument.ComponentSerials">
{{serial.name}}<br/>
<input type="text" ng-model="serial.value" />
</li>
</ul>
</div>
<button ng-click="printLabel()">Print</button>
</div>
</body>
</html>
textarea
。在文本域中,您可以使用回车键开始新一行。 - aimfeldfilter(':visible:not([readonly]):enabled')
。 - SnakeDrak