Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Табуляция инпута при нажатии Enter (https://javascript.ru/forum/jquery/33716-tabulyaciya-inputa-pri-nazhatii-enter.html)

svs_js 05.12.2012 12:33

Табуляция инпута при нажатии Enter
 
Всем привет,

Есть форма. При нажатии на Энтер в любом поле делать Фокус на следующем инпуте.

this.element.find('input[type=text]').on("keydown", function (e) {
                if (e.keyCode == '13') {
                    $(this).next().focus();
                    return false;
                }
            });


Данная конструкция не работает. Не пойму, в чем ошибка.

Sanda 05.12.2012 13:28

Потому что next() не обязан возвращать input - он вполне может вернуть div. Если инпуты идут в одном блоке, должна сработать такая конструкция:
$(this).next('input').focus();

Если же вёрстка более сложная, придётся искать обходные пути.

svs_js 05.12.2012 14:04

да, верстка более сложная. и все инпуты внутри объекта
this.element

Sanda 05.12.2012 14:30

Тогда могу предложить несколько вариантов:
1. Руками прописать в разметке или в скрипте порядок, в котором должен переключаться фокус.
2. Делать с помощью NodeIterator (или его самописного аналога, если требуется поддержка IE8).

Serg_pnz 05.12.2012 14:36

Я бы так сделал: посмотрел номер num инпута с помощью index() и перефокусировал на num+1
Только проверка нужна на последнем поле, что перефокусировка на на num=0

Sanda 05.12.2012 14:55

Serg_pnz,
а jQuery гарантирует, что элементы в выборке расположены в том же порядке, что и в documentOrder? Никак не могу найти упоминание об этом.

Serg_pnz 05.12.2012 16:20

я там напутал, eq() и index()

Sanda,
а нам-то что? Мы заюзаем index() от jquery в пределах формы.
Или теперь я что-то не понял?

Sanda 05.12.2012 16:40

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.

Serg_pnz 05.12.2012 20:48

Sanda,
не спорю, но если вёрстка позволяет, то почему не использовать.


Часовой пояс GMT +3, время: 04:31.