Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > onblur="this.focus();" и форма


Автор: SVK 16.3.2004, 18:50
Напоролся на какой-то дурацкий глюк IE6.

Задача: надо вернуть фокус на окно с формой, чтобы юзер не терял ее среди других окон.
Фокус-то возвращается, но при этом в форме перестает работать <select>! БЛИН!!! Подмигивает и сбрасывается в 1-й элемент.

Проблема в том, что оказывается при выборе элемента формы в IE поджигается событие window.onblur, затем скрипт исправно ставит фокус на window, при этом убирает его с select-a и селект сбрасывается.

В NS7 все работает нормально.
Код
<body onblur="this.focus();">
<select>
<option> 1st
<option> 2nd
<option> 3rd
</select>
</body>

Тот же эффект дает скрипт:
Код
function setFocus(){window.focus();}
window.onblur=setFocus;

Пробовал модальный диалог, но он мне не подходит по другим причинам.
Не знаю, что и делать... Казалось, что все просто, ан нет.


Автор: Alx 16.3.2004, 20:03
пиши в Microsoft, бабки получишь! smile.gif) шутка

Автор: Sardar 17.3.2004, 01:11
По моему получаетс бесконечный цикл потери и тут же получения фокуса, у меня 1stPage2000 повис smile.gif.

Лучше отказатся от использования события onBlur. Опиши лучше задачу.

Автор: SVK 17.3.2004, 18:18
2 ALEXANDRO: писать мелкомягким стремно - спросят ведь S/N виндов - пи%%лей еще получишь smile.gif

2 Sardar: задача простейшая - есть web-приложение, в котором юзер открывает окошки со вспомогательными формами, чтобы что-то там выбрать или сделать и вставить в главную форму. Очень желательно, чтобы "тупой" юзер не терял окошко с вспомогательной формой, случайно кликнув в другое окно эксплорера. То есть, открыл, поработал и закрыл. А если кликнул не туда, чтобы это окошко снова выскочило. Все, вроде, просто - ловим window.onblur и ставим фокус назад. Но window.onblur поджигается и при выборе элемента формы и window.focus() убирает фокус с элемента формы и ставит на window. В результате форма заблокирована.

Пока писал - решил проблему!: : )))

Код
<html><body>
<form name=theForm>
<select onfocus="formFocus(1);" onblur="formFocus(0);">
<option> 1 <option> 2 <option> 3
</select>
<input onfocus="formFocus(1);" onblur="formFocus(0);">
</form>

<script>
var foc=0;

function formFocus(f)
{ foc=f;
 window.status += "f"+f;
 if (f==0)
 window.setTimeout("setFocus()",10);
}

function wFocusLost()
{ window.status += "w0";
  window.setTimeout("setFocus()",10);
}

function setFocus()
{ if (foc == 0)
 { window.status += "w1;";
    window.focus();
 }
}
window.onblur=wFocusLost;
window.focus();
</script>
</body></html>


Таймаут нужен, т.к. сначала window теряет фокус, а потом уже элемент формы его получает. Всякие там window.status=... - только для того, чтобы посмотреть, что там творится.

Кривовато, правда - во все элементы onblur и onfocus вставлять.
Может, что-то красивее придумать можно?

Автор: Gold Dragon 17.3.2004, 19:16
Я не знаю на сколько это корректно, но так работает

<body onblur="document.focus();">
<select>
<option> 1st
<option> 2nd
<option> 3rd
</select>

Автор: SVK 18.3.2004, 10:36
2 Red Dragon - увы - работает только в том случае, если фокус перед уходом со страницы стоял где-то на <body>.
Если фокус был на элементе формы - то он не возвращается на окно. А жаль sad.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)