Я понял, как это решить, используя угловую директиву. Поместите эту директиву на элемент. Внутри этого элемента он добавит прослушиватель нажатия клавиш ко всем входам и кнопкам; он даже обрабатывает динамически добавленные элементы!
app.directive('nspPlusAsTab', function() {
function getNextTabbableElement(indexOfCurrentElement, tabbableElements) {
var indexOfNextTabbableElement;
var lastIndexInTabbableElements = tabbableElements.length - 1;
if (indexOfCurrentElement === lastIndexInTabbableElements) {
indexOfNextTabbableElement = 0;
} else {
indexOfNextTabbableElement = indexOfCurrentElement + 1;
}
var nextTabbableElement = tabbableElements[indexOfNextTabbableElement];
if (nextTabbableElement.disabled) {
nextTabbableElement = getNextTabbableElement(indexOfNextTabbableElement, tabbableElements);
}
return nextTabbableElement;
}
return {
restrict: 'A',
link: function(scope, element) {
//use jQuery.on to attach a keypress event handler function to all current and future input or button elements
element.on("keypress", "input, button", function(event) {
var plusKeycode = 43;
if (event.which === plusKeycode) {
event.stopPropagation();
event.preventDefault();
var tabbableElements = element.find("input, button");
var indexOfCurrentElement = tabbableElements.index(this);
var nextTabbableElement = getNextTabbableElement(indexOfCurrentElement, tabbableElements);
nextTabbableElement.focus();
}
});
element.on("focus", "input", function(){
this.select();
});
}
};
});
Я поймал событие, прекратил распространение и предотвратил по умолчанию. Но я не могу понять, как повысить пользовательское событие нажатия клавиши, используя angularjs. –
Я не знаю, как связать приложение, но сообщение 566481, www.stackoverlow.com/questions/596481, возможно, имеет чистую реализацию Javascript. Я бы предложил обернуть это в модуль с угловым модулем. – tuckerjt07