|
|
|
|
|
для: Воитель
(03.10.2009 в 11:15)
| |
<html>
<head>
<script>
onload = function ()
{ // назначаем инпутам "номерные" идентификаторы и "навешиваем" на них функцию funcCF
for (var ob = document.getElementById ('abc').getElementsByTagName ('input'), k = 0,
r = 1; r < 6; r++) for (var c = 1; c < 5; c++) {ob [k].id = 'r' + r + 'c' + c;
ob [k++].onkeyup = funcCF} // но надо, как выясняется, всё же onkeydown
}
function funcCF (evt)
{ // определяем код нажатой клавиши ko и номера строки ro и столбца ce
var ev = evt || window.event, ko = ev.keyCode, ob = ev.target || ev.srcElement,
x = ob.id.substr (1).split ('c'), ro = x [0] * 1, ce = x [1] * 1;
// реализуем перемещение фокуса
if (ko == 37 && ce != 1) document.getElementById ('r' + ro + 'c' + (ce - 1)).focus (); // влево
if (ko == 38 && ro != 1) document.getElementById ('r' + (ro - 1) + 'c' + ce).focus (); // вверх
if (ko == 39 && ce != 4) document.getElementById ('r' + ro + 'c' + (ce + 1)).focus (); // вправо
if (ko == 40 && ro != 5) document.getElementById ('r' + (ro + 1) + 'c' + ce).focus (); // вниз
}
</script>
</head>
<body>
<div id="abc">
<!-- c1 c2 c3 c4 -->
<input> <input> <input> <input> <!-- r1 -->
<br> <input> <input> <input> <input> <!-- r2 -->
<br> <input> <input> <input> <input> <!-- r3 -->
<br> <input> <input> <input> <input> <!-- r4 -->
<br> <input> <input> <input> <input> <!-- r5 -->
</div>
</body>
</html>
|
PS. Обнаружил, что в OPERA v.10 почему-то в инпуте не отслеживается onkeyup для клавиши "стрелка вниз", а onkeydown прекрасно работает.
PS2. Использовать name (а не id) тоже можно, однако в этом случае необходимо прописывать его значение непосредственно в теге (в MSIE атрибут name для инпутов является read only) и, соответственно, при использовании метода focus () надо к инпутам обращаться через коллекцию getElementsByName или через форму. | |
|
|
|
|
|
|
|
для: АЯ
(03.10.2009 в 04:49)
| | Спасибо.
Отдельное спасибо за примечание.
Передвижение я реализую через name а не id, но как я уже попробовал имя можно тоже легко запросить.
Немного не понятно как изменять кодом имя объекта которому я передам фокус.
С этим вопросом я ещё не рылся в инете, думаю найду ;-)
Знаю что в AS это делается через применение ["r" + var1 + "c" + var2] | |
|
|
|
|
|
|
|
для: Воитель
(03.10.2009 в 00:18)
| | В этой задаче вовсе нет необходимости использовать onfocus.
Когда вы будете "ловить" нажатие стрелок (для этого лучше используйте onkeyup, с onkeydown может возникнуть проблема "юзабилити"- см. примечание), то через объект event вы легко сможете узнать не только keyCode нажатой клавиши, но и ВСЁ об объекте, в котором это событие (отпускание клавиши) произошло.
<script>
function funcCF (evt)
{
var ev = evt || window.event, ko = ev.keyCode, ob = ev.target || ev.srcElement;
if (ko < 41 && ko > 36) alert ('id: ' + ob.id + '\narrow: ' + ko);
}
</script>
<input id="r2c3" onkeyup="funcCF (event)">
|
А если вы в идентификаторе инпутов заложите информацию о номерах строки и столбца (в примере это 2-я строка и 3-й столбец - id="r2c3"), то тогда, определив направление (по коду нажатой стрелки), вам легко будет прибавить/отнять единицу от номера строки (или столбца) текущего инпута, чтобы получить id инпута, куда следует переместить фокус методом focus ().
* Обычный юзер смотрит на клавиатуру, а не на экран, нажимая клавиши. Нажмёт юзер стрелку и программа ТУТ ЖЕ переместит фокус в другое поле. А юзер (ещё не отпуская клавиши) поднимет глаза на экран: фокус моргает - но в том поле, или уже в новом? - юзер уже и не помнит. Отпустил клавишу, а фокус так и "остался" мигать в "том же" поле. Подумает юзер, что ваша "фича" со стрелками не работает. Понятно?
При ловле "отпускания" клавиши таких проблем не будет. | |
|
|
|
|
|
|
| Здравствуйте.
Думаю все из читающих это сообщение хотябы раз заполняли какую-нибудь анкету, например на регистрирование в этом форуме. И многие при заполнении пользуются клавишей <Tab>
для перехода с одной строки ввода на другую.
У меня на сайте располагается таблица текстовых полей 4 на 5.
И чтобы переместиться на строку ниже надо нажать пользователю <Tab> 5 раз.
Можно ли как-то осуществить переход с помощью стрелок.
Я уже что-то нашёл например:
<body onkeydown="alert(event.keyCode);"> //Нажатие на кпоку
Для управления фокусом у объекта класса окно существуют два метода focus() и blur(). //Думаю для текстовых полей тоже самое.
Но у меня вопрос как узнать у кого сейчас фокус?
Лично у меня только через событие "Появление фокуса" вроде onFocus()
Есть ли какие другие варианты?
Если что из выше написанного не правильно поправьте. | |
|
|
|
|