Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.08.2009, 08:34
Интересующийся
Отправить личное сообщение для Athlete Посмотреть профиль Найти все сообщения от Athlete
 
Регистрация: 13.03.2009
Сообщений: 13

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

function validate() 
{
if(document.getElementById('doc').value=="")
{
   window.alert("Не введено значение!");
   document.getElementById('doc').focus();
}
}
Ответить с цитированием
  #2 (permalink)  
Старый 03.08.2009, 17:43
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

alert срабатывает?
Ответить с цитированием
  #3 (permalink)  
Старый 04.08.2009, 00:27
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

После закрытия диалогового окна, вызванного alert'ом, происходит передача фокуса родительскому окну, которая, видимо, и сбивает устанавливаемый вами фокус ввода.
Ответить с цитированием
  #4 (permalink)  
Старый 04.08.2009, 06:57
Интересующийся
Отправить личное сообщение для Athlete Посмотреть профиль Найти все сообщения от Athlete
 
Регистрация: 13.03.2009
Сообщений: 13

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

Сообщение от Octane
После закрытия диалогового окна, вызванного alert'ом, происходит передача фокуса родительскому окну, которая, видимо, и сбивает устанавливаемый вами фокус ввода.
А можно как то выйти из ситуации?
Ответить с цитированием
  #5 (permalink)  
Старый 04.08.2009, 10:05
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

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

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

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

Последний раз редактировалось B~Vladi, 04.08.2009 в 10:08.
Ответить с цитированием
  #6 (permalink)  
Старый 04.08.2009, 12:01
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

По таймеру через небольшой промежуток времени попробуйте поставить фокус в нужное поле ввода
Ответить с цитированием
  #7 (permalink)  
Старый 04.08.2009, 12:06
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Octane
По таймеру через небольшой промежуток времени попробуйте поставить фокус в нужное поле ввода
Не нужен никакой таймер. Всё работает.
Ответить с цитированием
  #8 (permalink)  
Старый 07.01.2010, 17:50
Интересующийся
Отправить личное сообщение для assessor Посмотреть профиль Найти все сообщения от assessor
 
Регистрация: 07.01.2010
Сообщений: 13

Сообщение от B~Vladi Посмотреть сообщение
Не нужен никакой таймер. Всё работает.
Напишите, пожалуйста, код для примера из первого поста с учетом отмены действия по умолчаниюю
Ответить с цитированием
  #9 (permalink)  
Старый 08.01.2010, 10:20
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 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>
Ответить с цитированием
  #10 (permalink)  
Старый 08.01.2010, 11:25
Интересующийся
Отправить личное сообщение для assessor Посмотреть профиль Найти все сообщения от assessor
 
Регистрация: 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) &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();

}
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работает в Mozilla и не работает в IE Maxidrom Events/DOM/Window 4 27.02.2010 16:37
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 15:59
Safari + ajax некорректно работает, а в других работает demi AJAX и COMET 35 15.07.2009 14:11
Не работает eval в IE ..::Silence::.. Общие вопросы Javascript 8 25.03.2009 13:16
Скрипт меню-гармошки работает выборочно Extern Элементы интерфейса 2 23.02.2009 15:32