У мене були такі самі вимоги при розробці, тому я досліджував це. За останні два дні я прочитав багато статей і спробував багато рішень, таких як плагін jQuery.tabNext ().
У мене були проблеми з IE11 (ця версія IE має цю помилку). Коли введений текст, за яким не вводиться текст, виділення не було очищено. Тож я створив власний метод tabNext () на основі пропозиції рішення @Sarfraz. Я також думав про те, як це повинно поводитись (лише коло в поточній формі або, можливо, через повний документ). Я все ще не піклувався про властивість табіндексу, здебільшого тому, що використовую його час від часу. Але я цього не забуду.
Щоб мій внесок міг бути корисним для всіх, я створив приклад jsfiddle тут https://jsfiddle.net/mkrivan/hohx4nes/
Тут я також включаю частину прикладу JavaScript:
function clearSelection() {
if (document.getSelection) {
document.getSelection().removeAllRanges();
document.getSelection().addRange(document.createRange());
console.log("document.getSelection");
} else if (window.getSelection) {
if (window.getSelection().removeAllRanges) {
window.getSelection().removeAllRanges();
window.getSelection().addRange(document.createRange());
console.log("window.getSelection.removeAllRanges");
} else if (window.getSelection().empty) {
window.getSelection().empty();
console.log("window.getSelection.empty");
}
} else if (document.selection) {
document.selection.empty();
console.log("document.selection.empty");
}
}
function focusNextInputElement(node) {
if (node !== null) {
var inputs = $(node).parents("form").eq(0).find(":input:visible:not([disabled]):not([readonly])");
var idx = inputs.index(node) + 1;
if (idx === inputs.length) {
idx = 0;
}
var nextInputElement = inputs[idx];
nextInputElement.focus();
try {
nextInputElement.select();
} catch (e) {
}
}
}
function tabNext() {
var currentActiveNode = document.activeElement;
clearSelection();
focusNextInputElement(currentActiveNode);
}
function stopReturnKey(e) {
var e = (e) ? e : ((event) ? event : null);
if (e !== null) {
var node = (e.target) ? e.target : ((e.srcElement) ? e.srcElement : null);
if (node !== null) {
var requiredNode = $(node).is(':input')
&& !$(node).is('textarea');
if ((e.keyCode === 13) && requiredNode) {
try {
tabNext();
console.log("success");
} catch (e) {
console.log("error");
}
return false;
}
}
}
}
document.onkeydown = stopReturnKey;
Я також залишив коментовані рядки, щоб моє мислення можна було простежити.