Перемещение стрелками по полям формы
Есть большая таблица, где ячейками являются input'ы. Нужно сделать, чтобы по этим инпутам можно было перемещаться стрелками, как в экселе.
Таблица упрощенно такая: <table> <tr><td><input id=price19></td><td><input id=quantity19></td><td><input id=size19></td></tr> <tr><td><input id=price540></td><td><input id=quantity540></td><td><input id=size540></td></tr> <tr><td><input id=price7></td><td><input id=quantity7></td><td><input id=size7></td></tr> <tr><td><input id=price192></td><td><input id=quantity192></td><td><input id=size192></td></tr> <tr><td><input id=price37></td><td><input id=quantity37></td><td><input id=size37></td></tr> </table> Всем инпутам прописаны id, по ним идет адресация для различных скриптов. Эти id образуются просто из обозначения по-смыслу + номер товара. Например, количество для 19 товара будет id="quantity19". То есть, в каждой колонке у инпута название образуется из заданного + номер. Номера товаров по строкам идут не по порядку, конечно. Как я понимаю, для реализации навигации стрелками надо сделать массивы из возможных названий (смысловых) и номеров, встречающихся в id, и по ним смотреть куда передавать фокус. Например, для вышеприведенной таблица массивы такие: Код:
var list_id = new Array (price, quantity, size); Подскажите, как это реализовать? |
<table> <tr><td><input id=price19></td><td><input id=quantity19></td><td><input id=size19></td></tr> <tr><td><input id=price540></td><td><input id=quantity540></td><td><input id=size540></td></tr> <tr><td><input id=price7></td><td><input id=quantity7></td><td><input id=size7></td></tr> <tr><td><input id=price192></td><td><input id=quantity192></td><td><input id=size192></td></tr> <tr><td><input id=price37></td><td><input id=quantity37></td><td><input id=size37></td></tr> </table> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <script> $('table input').keydown(function(e) { var td; switch (e.keyCode) { case 39: // right td = $(this).parent('td').next(); break; case 37: // left td = $(this).parent('td').prev(); break; case 40: // down var i = $(this).parent().index() + 1; td = $(this).closest('tr').next().find('td:nth-child(' + i + ')'); break; case 38: // up var i = $(this).parent().index() + 1; td = $(this).closest('tr').prev().find('td:nth-child(' + i + ')'); break; } td.find('input').focus(); }); </script> |
Немного неправильно выразился по коду таблицы. В одной ячейке может быть несколько input'ов с разными именами. Предыдущее решение на это не рассчитано.
|
Часовой пояс GMT +3, время: 20:02. |