03.08.2009, 08:34
|
Интересующийся
|
|
Регистрация: 13.03.2009
Сообщений: 13
|
|
Не работает focus() в ff
Всем привет, пишу свои первые функции на JS и столкнулся с проблемой: в ff пытаюсь вернуть фокус на элемент формы после alert, но почему то не получается, хотя в IE все прекрасно работает, подскажите, в чем секрет.
function validate()
{
if(document.getElementById('doc').value=="")
{
window.alert("Не введено значение!");
document.getElementById('doc').focus();
}
}
|
|
03.08.2009, 17:43
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
alert срабатывает?
|
|
04.08.2009, 00:27
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
После закрытия диалогового окна, вызванного alert'ом, происходит передача фокуса родительскому окну, которая, видимо, и сбивает устанавливаемый вами фокус ввода.
|
|
04.08.2009, 06:57
|
Интересующийся
|
|
Регистрация: 13.03.2009
Сообщений: 13
|
|
Сообщение от Riim
|
alert срабатывает?
|
Срабатывает.
Сообщение от Octane
|
После закрытия диалогового окна, вызванного alert'ом, происходит передача фокуса родительскому окну, которая, видимо, и сбивает устанавливаемый вами фокус ввода.
|
А можно как то выйти из ситуации?
|
|
04.08.2009, 10:05
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Это происходит потому, что срабатывает событие по умолчанию: страница отправляет данные формы(перезагружается), поэтому никакого фокуса вы не увидите. А незаметно, т.к. локально
Выход: отменить действие по-умолчанию, если не проходит валидацию. Как это сделать смотрите в статьях про события.
ЗЫ: return false тут не поможет
Последний раз редактировалось B~Vladi, 04.08.2009 в 10:08.
|
|
04.08.2009, 12:01
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
По таймеру через небольшой промежуток времени попробуйте поставить фокус в нужное поле ввода
|
|
04.08.2009, 12:06
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Octane
|
По таймеру через небольшой промежуток времени попробуйте поставить фокус в нужное поле ввода
|
Не нужен никакой таймер. Всё работает.
|
|
07.01.2010, 17:50
|
Интересующийся
|
|
Регистрация: 07.01.2010
Сообщений: 13
|
|
Сообщение от B~Vladi
|
Не нужен никакой таймер. Всё работает.
|
Напишите, пожалуйста, код для примера из первого поста с учетом отмены действия по умолчаниюю
|
|
08.01.2010, 10:20
|
|
Профессор
|
|
Регистрация: 10.09.2009
Сообщений: 1,577
|
|
Сообщение от assessor
|
Напишите, пожалуйста, код для примера из первого поста с учетом отмены действия по умолчаниюю
|
Если речь идет действительно о валидации данных формы перед отправкой то держи:
<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>
|
|
08.01.2010, 11:25
|
Интересующийся
|
|
Регистрация: 07.01.2010
Сообщений: 13
|
|
Спасибо, 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) && ((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();
}
|
|
|
|