После 30 минут сна я нашел решение в такт.
Как вы указали, просто input:not([readonly]):last
сделайте свое дело.Итак, почему это не сработало для меня?
Моя проблема заключалась в том, что на последнем входе, не предназначенном только для чтения, повлияли два события, опубликованные в деталях вопроса.Тот, который срабатывает, когда вы нажимаете ввод на последнем не только для чтения, а другой, который срабатывает, когда вы нажимаете ввод на любом не последнем входе.
Таким образом, решением было просто выбрать все не readonly
и изменить поведение после проверки, еслиэто был последний или нет.
JS Fiddle: http://jsfiddle.net/60x47pu1/3/
По сути, я заменяю код JS, отправленный для этого:
$('#table_invoiceProducts').on('keydown', 'input:not(:last)', function(e){
var keyCode = e.keyCode || e.which;
if(keyCode == 9 || keyCode == 13){
e.preventDefault();
if ($('#table_invoiceProducts input:not([readonly])').length == $('#table_invoiceProducts input:not([readonly])').index(this)+1){
$( '#formInput_91' ).focus();
}
else
{
$('#table_invoiceProducts input:not([readonly])')[$('#table_invoiceProducts input:not([readonly])').index(this)+1].focus();
$('#table_invoiceProducts input:not([readonly])')[$('#table_invoiceProducts input:not([readonly])').index(this)+1].select();
}
}
});
Оффтоп: не забывайте спатьхорошо.