Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 03.07.2012, 17:48
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от autosoft
Во всех браузерах (кроме Opera) на 6-м шаге инициируется событие onblur первого input.
В Opera - нет. Тестировал на Opera 11 и Opera 12.
Раз нужного эффекта нет, надо искать пути его создания.
Ответ на вопрос "Почему нет?" - "Потому что так сделали!" (в IE тоже много чего есть, чего нет в других браузерах, и наоборот).
Ответить с цитированием
  #12 (permalink)  
Старый 03.07.2012, 17:51
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от autosoft
Во всех браузерах (кроме Opera) на 6-м шаге инициируется событие onblur первого input.
В Opera - нет. Тестировал на Opera 11 и Opera 12.
Да вы правы, это Баг в Опере, надо будет репорт отправить.
<script type="text/javascript">
  
function dofocus(self) {document.body.appendChild(document.createTextNode('focus('+self.name+'), '))}
function doblur (self) {document.body.appendChild(document.createTextNode('blur('+self.name+'), '))}
 
</script>
<form id="upload" method="post" enctype="multipart/form-data" action="/upload7">
        <input tabindex="1" type=file name='file1' onfocus='dofocus(this);' onblur='doblur(this);'><br />
        <div tabindex=2>div</div><br />
        <input tabindex="3" type=file name='file2' onfocus='dofocus(this);' onblur='doblur(this);'><br />
        <div tabindex=4>div</div><br />
        <input tabindex="5" type=file name='file3' onfocus='dofocus(this);' onblur='doblur(this);'><br />
</form>
по примеру видно что блюр работает но только на последнем инпуте
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #13 (permalink)  
Старый 03.07.2012, 18:04
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

devote, тогда уж и про хром отправлять, там при помощи мыши фокус вообще не установить.
Ответить с цитированием
  #14 (permalink)  
Старый 03.07.2012, 23:34
Аспирант
Отправить личное сообщение для autosoft Посмотреть профиль Найти все сообщения от autosoft
 
Регистрация: 23.08.2008
Сообщений: 30

Спасибо всем за ответы. Наверное это действительно баг.

По поводу Chromium.
Такой вариант подойдет?
<script type="text/javascript">
doclick = function (event) {

    if (navigator.userAgent.toLowerCase().indexOf('webkit') >= 0) {

        event.stopPropagation()
        event.target.focus()
    }
}
</script>
<html>
    <body>
        <form action='/'>
            <input type=file onclick='doclick(event)'>
        </form>
    </body>
</html>
Ответить с цитированием
  #15 (permalink)  
Старый 03.07.2012, 23:55
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<script type="text/javascript">
  
function dofocus(self) {document.body.appendChild(document.createTextNode('focus('+self.name+'), '))}
function doblur (self) {document.body.appendChild(document.createTextNode('blur('+self.name+'), '))}
 
</script>
<form id="upload" method="post" enctype="multipart/form-data" action="/upload7">
<table>
   <tr><td><input type="file" name='file1' onfocus='dofocus(this);' onblur='doblur(this);'/><td>file1</td>
   </tr>
   <tr><td><input type="file" name='file2' onfocus='dofocus(this);' onblur='doblur(this);'/></td><td>file2</td>
   </tr>
   <tr><td><input type="file"  name='file3'  onfocus='dofocus(this);' onblur='doblur(this);'/></td><td>file3</td>
    </tr>
</table>
</form>
Ответить с цитированием
  #16 (permalink)  
Старый 04.07.2012, 00:03
Аспирант
Отправить личное сообщение для autosoft Посмотреть профиль Найти все сообщения от autosoft
 
Регистрация: 23.08.2008
Сообщений: 30

Deff
Что толку то? Мне фокус нужен на div. Ну или на td, как в последнем примере. Например так:
<script type="text/javascript">
   
function dofocus(self) {document.body.appendChild(document.createTextNode('focus('+self.name+'), '))}
function doblur (self) {document.body.appendChild(document.createTextNode('blur('+self.name+'), '))}
  
</script>
<form id="upload" method="post" enctype="multipart/form-data" action="/upload7">
<table>
   <tr><td><input type="file" name='file1' onfocus='dofocus(this);' onblur='doblur(this);'/><td tabindex=0>file1</td>
   </tr>
   <tr><td><input type="file" name='file2' onfocus='dofocus(this);' onblur='doblur(this);'/></td><td tabindex=0>file2</td>
   </tr>
   <tr><td><input type="file"  name='file3'  onfocus='dofocus(this);' onblur='doblur(this);'/></td><td tabindex=0>file3</td>
    </tr>
</table>
</form>

В результате: focus(file1), focus(file2), focus(file3),

А onblur как не было так и нет.
Ответить с цитированием
  #17 (permalink)  
Старый 04.07.2012, 00:14
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<script type="text/javascript">
  
function dofocus(self) {document.body.appendChild(document.createTextNode('focus('+self.name+'),'))}
function doblur (self) {document.body.appendChild(document.createTextNode('blur('+self.name+'),'))}
 
</script>


<form id="upload" method="post" enctype="multipart/form-data" action="/upload7">
<table>
   <tr><td><input type="file" name='file1' onfocus='dofocus(this);' onblur='doblur(this);'/><td><input type="button" name='td1' onfocus='dofocus(this);' onblur='doblur(this);'/></td>
   </tr>
   <tr><td><input type="file" name='file2' onfocus='dofocus(this);' onblur='doblur(this);'/></td><td><input type="button" name='td2' onfocus='dofocus(this);' onblur='doblur(this);'/></td>
   </tr>
   <tr><td><input type="file"  name='file3'  onfocus='dofocus(this);' onblur='doblur(this);'/></td><td><input type="button" name='td2' onfocus='dofocus(this);' onblur='doblur(this);'/></td>
    </tr>
</table>
</form>

Последний раз редактировалось Deff, 04.07.2012 в 00:17.
Ответить с цитированием
  #18 (permalink)  
Старый 04.07.2012, 00:35
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Deff,
чего бы ты не лепил, но тот вариант реально Баг, я отправил репорт в Оперу. Дальше видно будет что к чему.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #19 (permalink)  
Старый 04.07.2012, 00:38
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

devote,
Да баг багом, но обычно прожект доделывают не дожидаясь правки софта?
В принципе <button> стилем под div заделать
Ответить с цитированием
  #20 (permalink)  
Старый 04.07.2012, 00:47
Аспирант
Отправить личное сообщение для autosoft Посмотреть профиль Найти все сообщения от autosoft
 
Регистрация: 23.08.2008
Сообщений: 30

Спасибо всем за ответы! Я как раз и с button вариант попробовал.

Мне div нужен как контейнер. В таком div свой контрол нарисован. С рисунками и со своей логикой. И ему нужно фокус принимать. И отдавать конечно тоже.
Input не подходит потому что не контейнер. Или я ошибаюсь?
Заменил input на button. Вот так:
<script type="text/javascript">

function dofocus(self) {

    document.body.appendChild(document.createTextNode('focus('+self.name+'), '))
}

function doblur(self) {

    document.body.appendChild(document.createTextNode('blur('+self.name+'), '))
}

</script>
<form action='/'>
<table>
    <tr>
        <td>
            <input type="file" name='file1' onfocus='dofocus(this)' onblur='doblur(this)'>
            <button name='button1' onfocus='dofocus(this)' onblur='doblur(this)'>Button1</button>
        </td>
    </tr>
    <tr>
        <td>
            <input type="file" name='file2' onfocus='dofocus(this)' onblur='doblur(this)'>
            <button name='button2' onfocus='dofocus(this)' onblur='doblur(this)'>Button2</button>
        </td>
    </tr>
    <tr>
        <td>
            <input type="file" name='file3' onfocus='dofocus(this)' onblur='doblur(this)'>
            <button name='button3' onfocus='dofocus(this)' onblur='doblur(this)'>Button3</button>
        </td>
    </tr>
</table>
</form>

И снова события onblur нет у <input type=file>.
Почему он нужен? <input type=file> на странице невидим и сам находится в div.
По-сути этот div - стилизованная кнопка для загрузки файлов.
Поэтому что бы его "правильно" нарисовать нужно событие onblur <input type=file>.
А его в Opera почему-то нет.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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