![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Mindstorm |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 9.7.2009 Репутация: нет Всего: нет |
Есть генерируемая на сервере таблица. Поля таблицы представлены текстом между <div></div>. По событию onclick на ячейке таблицы текст становиться содержимым <input type=text>, к. появляется в ячейке таблицы на месте текста. По событию onblur для этого input его содержимое обратно переходит в текст.
Задача: реализовать возможность перебора с помощью tab. Т.е. единовременно у меня одна ячейка представлена input, остальные текстом, по нажатию tab я перехожу в следующую ячейку, она становиться input, а предыдущая текстом. Т.е. все то, что уже работает, но без мышкокликанья. Я накорябал вот такой обработчик:
в любом из этих вариантов в режиме debug (firebug) видно, что нужная ячейка преобразуется, но потом по непонятной мне причине вызывается обработчик onblur для этого элемента и ячейка обратно переходит в текст. Замечание: в функции editBox для input вызывается .focus(). Пожалуйста, подскажите. Возможно я неправильно понимаю работу события focus. Заранее спасибо ![]() |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Вероятно, неправильно понимается механизм обработки событий в JavaScript. После вызова обработчика продолжается вызов всех остальных навешенных на элемент обработчиков, включая и переход на другой элемент по табу. Чтобы его отменить, в некоторых случаях достаточно вернуть false в качестве результата, в некоторых нужно сделать еще stopImmediatePropagation -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Mindstorm |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 9.7.2009 Репутация: нет Всего: нет |
Большое спасибо за напоминание - про то, что event идет дальше по дереву, я действительно забыл, но ни один из предложенных вариантов не помог - событие onblur все равно вызывается. И я, честно говоря, все еще не пойму почему. Дело в том, что событие onblur срабатывает для того же элемента, на к. только что установил фокус (а не на предыдущем - я так понял из слов
![]() Это сообщение отредактировал(а) Mindstorm - 10.2.2011, 12:11 |
|||
|
||||
ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Можно выкинуть эти функции
, заменить их
и убедиться, что onblur перестал вызываться. Потом вставить функции и смотреть как оно пойдет... Процесс называется отладка ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||
|
|||||
Mindstorm |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 9.7.2009 Репутация: нет Всего: нет |
![]()
то onblur и без
не срабатывает. Он также не срабатывает, если просто закомментить input.focus() в функции editBox. Но мне не интересно, если я нажал tab, а у меня курсора в input нет) Добавлено через 12 минут и 1 секунду Проблема решена! По совету одного человека заменил keypress на keyup и вуаля ![]() ksnk, спасибо за участие, информация все равно была полезной. |
||||
|
|||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |