Табуляция инпута при нажатии Enter
Всем привет,
Есть форма. При нажатии на Энтер в любом поле делать Фокус на следующем инпуте. this.element.find('input[type=text]').on("keydown", function (e) { if (e.keyCode == '13') { $(this).next().focus(); return false; } }); Данная конструкция не работает. Не пойму, в чем ошибка. |
Потому что next() не обязан возвращать input - он вполне может вернуть div. Если инпуты идут в одном блоке, должна сработать такая конструкция:
$(this).next('input').focus(); Если же вёрстка более сложная, придётся искать обходные пути. |
да, верстка более сложная. и все инпуты внутри объекта
this.element |
Тогда могу предложить несколько вариантов:
1. Руками прописать в разметке или в скрипте порядок, в котором должен переключаться фокус. 2. Делать с помощью NodeIterator (или его самописного аналога, если требуется поддержка IE8). |
Я бы так сделал: посмотрел номер num инпута с помощью index() и перефокусировал на num+1
Только проверка нужна на последнем поле, что перефокусировка на на num=0 |
Serg_pnz,
а jQuery гарантирует, что элементы в выборке расположены в том же порядке, что и в documentOrder? Никак не могу найти упоминание об этом. |
я там напутал, eq() и index()
Sanda, а нам-то что? Мы заюзаем index() от jquery в пределах формы. Или теперь я что-то не понял? |
Serg_pnz,
где гарантия, что следующий скрипт выведет 'div1'? <div id="div1"></div> <div id="div2"></div> <script> alert($('div')[0].id) </script> UPD: нашёл ссылку для случая селектора по tagName. Действительно, тут всегда div1, потому что jQuery использует getElementByTagName. Но в целом не могу найти ссылку на то, что в выборке jQuery элементы всегда расположены в том же порядке, что и в document order. |
Sanda,
не спорю, но если вёрстка позволяет, то почему не использовать. |
Часовой пояс GMT +3, время: 04:31. |