Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.10.2009, 00:19
Интересующийся
Отправить личное сообщение для Воитель Посмотреть профиль Найти все сообщения от Воитель
 
Регистрация: 24.06.2008
Сообщений: 26

Перемещение между строками ввода стрелками
Здравствуйте.
Думаю все из читающих это сообщение хотябы раз заполняли какую-нибудь анкету, например на регистрирование в этом форуме. И многие при заполнении пользуются клавишей <Tab>
для перехода с одной строки ввода на другую.

У меня на сайте располагается таблица текстовых полей 4 на 5.
И чтобы переместиться на строку ниже надо нажать пользователю <Tab> 5 раз.
Можно ли как-то осуществить переход с помощью стрелок.
Я уже что-то нашёл например:

<body onkeydown="alert(event.keyCode);"> //Нажатие на кпоку
Для управления фокусом у объекта класса окно существуют два метода focus() и blur(). //Думаю для текстовых полей тоже самое.

Но у меня вопрос как узнать у кого сейчас фокус?
Лично у меня только через событие "Появление фокуса" вроде onFocus()
Есть ли какие другие варианты?

Если что из выше написанного не правильно поправьте.
Ответить с цитированием
  #2 (permalink)  
Старый 03.10.2009, 12:17
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Воитель
Но у меня вопрос как узнать у кого сейчас фокус?
Проверять, в каком поле стрелку нажали, стопудово в ней фокус будет.
Ответить с цитированием
  #3 (permalink)  
Старый 03.10.2009, 12:41
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
window.onload = function() {
	var dom = (function() {
		var traversal = "firstElementChild" in document.body;
		return {
			next: traversal ? function(node) {
				return node.nextElementSibling;
			} : function(node) {
				var next = node.nextSibling;
				while(next && next.nodeType !== 1) {
					next = next.nextSibling;
				}
				return next;
			},
			prev: traversal ? function(node) {
				return node.previousElementSibling;
			} : function(node) {
				var prev = node.previousSibling;
				while(prev && prev.nodeType !== 1) {
					prev = prev.previousSibling;
				}
				return prev;
			}
		};
	}());
	function setFocus(e) {
		e = e || window.event;
		if(e.keyCode == 38 || e.keyCode == 40) {
			var cell = this.parentNode;
			var row = dom[e.keyCode == 38 ? "prev" : "next"](cell.parentNode);
			if(row) {
				row.getElementsByTagName("input")[cell.cellIndex].focus();
			}
		}
	}
	var list = document.getElementById("grid").getElementsByTagName("input");
	var i = list.length;
	while(i--) {
		list[i].onkeydown = setFocus;
	}
};
</script>
</head>
<body>
	<div>
		<table id="grid" summary="">
			<tbody>
				<tr>
					<td><input type="text" /></td>
					<td><input type="text" /></td>
					<td><input type="text" /></td>
					<td><input type="text" /></td>
					<td><input type="text" /></td>
				</tr>
				<tr>
					<td><input type="text" /></td>
					<td><input type="text" /></td>
					<td><input type="text" /></td>
					<td><input type="text" /></td>
					<td><input type="text" /></td>
				</tr>
				<tr>
					<td><input type="text" /></td>
					<td><input type="text" /></td>
					<td><input type="text" /></td>
					<td><input type="text" /></td>
					<td><input type="text" /></td>
				</tr>
			</tbody>
		</table>
	</div>
</body>
</html>

Последний раз редактировалось Octane, 03.10.2009 в 12:45.
Ответить с цитированием
  #4 (permalink)  
Старый 23.08.2010, 11:38
Новичок на форуме
Отправить личное сообщение для c-alex Посмотреть профиль Найти все сообщения от c-alex
 
Регистрация: 23.08.2010
Сообщений: 2

Octane,
Если перед полем ввода есть ячейка НЕ с полем ввода а например с текстом, то скрипт не работает!
т.е. вот такая таблица не подходит:
<table id="grid" summary="">
<tr>
<td>введите что-то:</td>
<td><input type="text" /></td>
<td><input type="text" /></td>
</tr>
<tr>
<td>введите что-то:</td>
<td><input type="text" /></td>
<td><input type="text" /></td>

</tr>
</table>

а что за таблица без текстовых полей ?

можно подстроиться под скрипт и добавить <input type="hidden"> перед текстом "введите что-то:" тогда заработает...
но сами понимаете ))

Последний раз редактировалось c-alex, 23.08.2010 в 11:40.
Ответить с цитированием
  #5 (permalink)  
Старый 23.08.2010, 11:53
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Переделайте скрипт, чтоб работало так, кто же мешает.
Ответить с цитированием
  #6 (permalink)  
Старый 23.08.2010, 15:23
Новичок на форуме
Отправить личное сообщение для c-alex Посмотреть профиль Найти все сообщения от c-alex
 
Регистрация: 23.08.2010
Сообщений: 2

ok, просто у меня столбцов с полями с текстом в таблице много (они стоят до полей ввода), и зря грузить их скрытыми инпутами не хотелось. Поскольку попытка решить вопрос по другому не удалась, то добавлю.
Но в любом случае спасибо за скрипт!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
двойной интервал между строками underW (X)HTML/CSS 4 03.05.2009 17:18
Переход между окнами ввода при заполнении. Бушка Общие вопросы Javascript 4 25.03.2009 15:40