Событие keyup запускается при каждом нажатии клавиши, включая нажатие клавиши Tab и Shift В этом разница между вашим javascript решением angularjs решением.
Я не уверен, есть ли эквивалент в oninput в angularjs. «keyup», «keydown», «input» работают по-разному. В angularjs есть ng-change, но для элемента ввода требуется ng-модель, и я не думаю, что $ event работает с ng-change.
В любом случае, есть работающее решение. Попробуйте это:
$scope.readKey = function(ele) {
console.log(ele);
if(ele.shiftKey) return;
if (ele.currentTarget.value.length >= 1) {
ele.currentTarget.value = ele.currentTarget.value[ele.currentTarget.value.length - 1];
}
try {
if (ele.currentTarget.value === null || ele.currentTarget.value === "" ) {
foucusOnInput(ele.currentTarget.previousElementSibling);
} else {
foucusOnInput(ele.currentTarget.nextElementSibling);
}
} catch (e) {
console.log(e);
}
};
Этот код, прослушиваемый при keyup вместо ввода, не позволит go перейти к следующему полю ввода, если текущее поле ввода пусто. В вашем примере javascript код в обработчике ввода никогда не выполняется, поэтому вы можете перейти к следующему полю ввода, если текущее поле пусто.
Если вы хотите добиться того же самого в решении angularjs, попробуйте изменить условие на следующее:
if(ele.shiftKey || ele.keyCode === 9) return;
Это предотвращает выполнение кода, если его клавиша Shift или клавиша табуляции. 9 - это код клавиши для клавиши TAB.