Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.07.2012, 12:17
Аспирант
Отправить личное сообщение для autosoft Посмотреть профиль Найти все сообщения от autosoft
 
Регистрация: 23.08.2008
Сообщений: 30

Opera, input file, div tabindex
Добрый день. Вопрос к знатокам.

Почему в броузере Opera элемент input (file) не генерирует событие onblur при переходе фокуса на div?

Пробовал в разных браузерах: IE, FF, Safari, Chromium - все так как должно быть.

В Opera - при переходе с <input type=file id='file1'> на <div tabindex=0>div</div> событие onblur не настает.
Почему? Как побороть?

<script language='JavaScript 1.5' type='text/JavaScript'>
 
dofocus = function (event) { document.title += 'F'; }
doblur = function (event) { document.title += 'B'; }

</script>
<html>
	<body>
		<input type=file id='file1' onfocus='dofocus();' onblur='doblur();'>
		<div tabindex=0>div</div>
		<input type=file id='file2' onfocus='dofocus();' onblur='doblur();'>
		<input type=file id='file3' onfocus='dofocus();' onblur='doblur();'>
	</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 03.07.2012, 12:33
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

autosoft,
Имхо по-моему в Опере, если только input type=file находится внутри формы с name="..."(*сказал на всякий случай),
Поскольку вне формы все эти деяния с type=file без толку в любом браузе, считать из input type=file может только форма

<script type="text/javascript">
 
function dofocus() {alert('A')}
function doblur () {alert('B')}

</script>
<form id="upload" method="post" enctype="multipart/form-data" action="/upload7">
		<input type=file id='file1' onfocus='dofocus();' onblur='doblur();'><br />
		<div tabindex=0>div</div><br />
		<input type=file id='file2' onfocus='dofocus();' onblur='doblur();'><br />
		<div tabindex=0>div</div><br />
		<input type=file id='file3' onfocus='dofocus();' onblur='doblur();'><br />
</form>

Последний раз редактировалось Deff, 03.07.2012 в 12:48.
Ответить с цитированием
  #3 (permalink)  
Старый 03.07.2012, 12:47
Аспирант
Отправить личное сообщение для autosoft Посмотреть профиль Найти все сообщения от autosoft
 
Регистрация: 23.08.2008
Сообщений: 30

Это понятно. Пусть тогда такой пример:
<script>

dofocus = function (event) { document.title += 'F'; }
doblur = function (event) { document.title += 'B'; }

</script>
<html>
	<body>
		<form action='/'>
			<input type=file id='file1' onfocus='dofocus();' onblur='doblur();'>
			<div tabindex=0>div</div>
			<input type=file id='file2' onfocus='dofocus();' onblur='doblur();'>
			<input type=file id='file3' onfocus='dofocus();' onblur='doblur();'>
		</form>
	</body>
</html>

Все равно не работает.
Интересно, что если вместо "file" указать, например "text" - то все события генерируются в Opere так же как и в других браузерах.
Но нужно именно "file" и div с фокусом тоже нужен.
Ответить с цитированием
  #4 (permalink)  
Старый 03.07.2012, 12:49
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

autosoft,
Пример Выше
Ответить с цитированием
  #5 (permalink)  
Старый 03.07.2012, 12:56
Аспирант
Отправить личное сообщение для autosoft Посмотреть профиль Найти все сообщения от autosoft
 
Регистрация: 23.08.2008
Сообщений: 30

Пример Выше
Не работает этот пример. Ни в Opera12 (Linux) ни в Opera12 (Windows).

Событе onblur в Opera при переходе с input на div не настает.

Последний раз редактировалось autosoft, 03.07.2012 в 13:18.
Ответить с цитированием
  #6 (permalink)  
Старый 03.07.2012, 15:35
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Почему не настаёт, настаёт, можно проверить, пощёлкав на Tab, или выбрать какой-нибудь файл в опере (в хроме это не прокатит), вот если в опере файл не выбрать обработчик onfocus не сработает (в хроме по-любому не сработает), onblur соответственно тоже.
Ответить с цитированием
  #7 (permalink)  
Старый 03.07.2012, 15:44
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от bes
вот если в опере файл не выбрать обработчик onfocus не сработает
у мну всё работает версия 9.5 10.5 11.5
Ответить с цитированием
  #8 (permalink)  
Старый 03.07.2012, 15:52
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Deff
у мну всё работает версия 9.5 10.5 11.5
да, всё чётко и так работает, значит я где-то блажанул, пока экспериментировал
вот в хроме вообще не пашет, this.focus() не помогает для input type="file"
Ответить с цитированием
  #9 (permalink)  
Старый 03.07.2012, 16:35
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Для хрома, оперы и FF пока лучший вариант
<input type=file onclick='dofocus()' onchange="this.focus()" onblur='doblur()'>

в IE возникает лишний вызов onblur
Ответить с цитированием
  #10 (permalink)  
Старый 03.07.2012, 17:18
Аспирант
Отправить личное сообщение для autosoft Посмотреть профиль Найти все сообщения от autosoft
 
Регистрация: 23.08.2008
Сообщений: 30

Хорошо. Тогда все по-порядку (по примеру который дал Deff - но сути дела это не меняет):

1. Указываем в Opere: file://localhost/home/user/www/index.html.
Можно разместить файл на работающем сайте - эффект тот же.

2. Нажимаем Enter.
Открывается страничка с тремя input type=file и div между ними.

3. Нажимаем Tab.
Инициируется событие onfocus первого input.
Открывается диалог alert.

4. Нажимаем Esc.
Закрывается диалог alert.

5. Нажимаем Tab.
Ничего не происходит, но курсор перемещается на кнопку первого input.
Первый input все еще активен.

6. Нажимаем Tab.
Курсор переходит на первый div.

7. Нажимаем Tab.
Инициируется событие onfocus второго input.
Открывается диалог alert.

8. ...

Во всех браузерах (кроме Opera) на 6-м шаге инициируется событие onblur первого input.
В Opera - нет. Тестировал на Opera 11 и Opera 12.
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Opera nowrap запретить перенос строк, div ... Gozar (X)HTML/CSS 12 11.04.2012 21:24
Opera не выполняет style.fontSize=... в поле input Маэстро Opera, Safari и др. 6 20.06.2011 12:03
[newbie question] input (file) -> submit -> php(json) zatoichi AJAX и COMET 1 18.01.2011 12:18
ширина Input внутри div jetli13 (X)HTML/CSS 3 28.09.2010 19:01
Обработка нескольких file input Temlekur Работа 8 21.01.2010 18:30