Javascript-форум (https://javascript.ru/forum/)
-   Firefox/Mozilla (https://javascript.ru/forum/css-html-firefox-mizilla/)
-   -   Не работает focus() в ff (https://javascript.ru/forum/css-html-firefox-mizilla/4562-ne-rabotaet-focus-v-ff.html)

Athlete 03.08.2009 08:34

Не работает focus() в ff
 
Всем привет, пишу свои первые функции на JS и столкнулся с проблемой: в ff пытаюсь вернуть фокус на элемент формы после alert, но почему то не получается, хотя в IE все прекрасно работает, подскажите, в чем секрет. :)

function validate() 
{
if(document.getElementById('doc').value=="")
{
   window.alert("Не введено значение!");
   document.getElementById('doc').focus();
}
}

Riim 03.08.2009 17:43

alert срабатывает?

Octane 04.08.2009 00:27

После закрытия диалогового окна, вызванного alert'ом, происходит передача фокуса родительскому окну, которая, видимо, и сбивает устанавливаемый вами фокус ввода.

Athlete 04.08.2009 06:57

Цитата:

Сообщение от Riim
alert срабатывает?

Срабатывает.

Цитата:

Сообщение от Octane
После закрытия диалогового окна, вызванного alert'ом, происходит передача фокуса родительскому окну, которая, видимо, и сбивает устанавливаемый вами фокус ввода.

А можно как то выйти из ситуации?

B~Vladi 04.08.2009 10:05

Это происходит потому, что срабатывает событие по умолчанию: страница отправляет данные формы(перезагружается), поэтому никакого фокуса вы не увидите. А незаметно, т.к. локально:)

Выход: отменить действие по-умолчанию, если не проходит валидацию. Как это сделать смотрите в статьях про события.

ЗЫ: return false тут не поможет:)

Octane 04.08.2009 12:01

По таймеру через небольшой промежуток времени попробуйте поставить фокус в нужное поле ввода

B~Vladi 04.08.2009 12:06

Цитата:

Сообщение от Octane
По таймеру через небольшой промежуток времени попробуйте поставить фокус в нужное поле ввода

Не нужен никакой таймер. Всё работает.

assessor 07.01.2010 17:50

Цитата:

Сообщение от B~Vladi (Сообщение 25930)
Не нужен никакой таймер. Всё работает.

Напишите, пожалуйста, код для примера из первого поста с учетом отмены действия по умолчаниюю

micscr 08.01.2010 10:20

Цитата:

Сообщение от assessor (Сообщение 39906)
Напишите, пожалуйста, код для примера из первого поста с учетом отмены действия по умолчаниюю

Если речь идет действительно о валидации данных формы перед отправкой то держи:
<script>
document.write(Math.random()); // только для проверки что не идет перезагрузка (у себя убрать естественно)
function validate() {
    var obj = document.form1.what;
	if (obj.value == '') {
	    alert('Не введено значение');
		obj.focus();
		return false;
	}
}
</script>

<form name="form1" method="post" action="" onSubmit="return validate()">
  <input type="text" name="what">
  <input type="submit" name="Submit" value="Submit">
</form>

assessor 08.01.2010 11:25

Спасибо, micscr.

Пользую движок форума, который я взял готовый.

А вот еще подскажите. Вставляю смайлик в поле textarea. В Опере и Экслорере курсор остается позади вставленного смайлика, а в ФФ уходит вниз техтареа, а фокус на начало техтареа.
Как для ФФ сделать, чтобы было как для Оперы и ИЕ?

<textarea tabindex=3 name=p_text rows=15 cols=60 onselect="javascript:storeCaret(this);" onFocus="focused=true" onBlur="focused=false" onclick="javascript:storeCaret(this);" onkeyup="javascript:storeCaret(this);" onchange="javascript:storeCaret(this);" onkeypress="if((event.ctrlKey) &amp;&amp; ((event.keyCode==10)||(event.keyCode==13))) {this.form.submit();}"></textarea>


<a href="/forum/index.php?t=16" onClick="AddText(' :2: '); return false;"><img border=0 src="smiles/02_bored.gif" alt=":2:"></a>

function AddText(text) {
if (text!='') insertText(document.postform.p_text, text);
document.postform.p_text.focus();

}


Часовой пояс GMT +3, время: 01:21.