Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не работает focus() в фоксе
 
 автор: AlexShag   (04.05.2015 в 20:19)   письмо автору
 
 


<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Тест даты</title>

  <script>

     function TestData(dt) {
       var vdt = dt.value;
       var adt = vdt.split('.');
       var err = "Не правильный формат даты";

        if(adt.length !=3 )    { alert(err); dt.value='01.01.2001'; dt.focus(); return; }
        if(adt[2].length !=4 ) { alert(err); dt.value='01.01.2001'; dt.focus(); return; }
        if(adt[1].length !=2 ) { alert(err); dt.value='01.01.2001'; dt.focus(); return; }
        if(adt[0].length !=2 ) { alert(err); dt.value='01.01.2001'; dt.focus(); return; }

         vdt=adt[2]+'-'+adt[1]+'-'+adt[0];
        if(new Date(vdt)=='Invalid Date') { alert(err); dt.value='01.01.2001'; dt.focus();  return; }
         if(parseInt(adt[2])>2099) { alert(err); dt.value='01.01.2001'; dt.focus();  return; }
         if(parseInt(adt[2])<2001) { alert(err); dt.value='01.01.2001'; dt.focus();  return; }
     }

  </script>

</head>

<body>
<br><br>
<center>
<form method="post">
  Дата: &nbsp; <input autofocus type="text" name="data1" value="01.01.2001" onblur="TestData(this)"><br>
  <br>
  Ф.И.О.: &nbsp; <input type="text" name="fio"><br>
  <br>
  <input type="submit" value="Отправить">
</form>
</center>

</body>
</html>



Если ввести не корректно дату то курсор должен вернуться в поле даты. Так вот в Фоксе курсор переходит в следующее поле. В Опере 28 вроде остается в поле даты но его не видно, в Опере 12, ИЕ-8 и в Хроме всё нормально. Что за хрень? Что не так делаю?

  Ответить  
 
 автор: яса_1   (05.05.2015 в 12:13)   письмо автору
 
   для: AlexShag   (04.05.2015 в 20:19)
 

<script>
function myFunc (obj)
{
obj.value='можно только так';
setTimeout ("document.getElementById ('mEl').focus ()", 10);
}
</script>

<input id="mEl" autofocus onblur="myFunc (this)">

и, кстати, "неправильный" пишется слитно

  Ответить  
 
 автор: AlexShag   (05.05.2015 в 15:28)   письмо автору
 
   для: яса_1   (05.05.2015 в 12:13)
 

Сделал вот так.

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Тест даты</title>

  <script>

    function gE(id) { return document.getElementById(id); }

    function ST() { setTimeout("OBJ.focus ()", 10); }

    function TestData(dt) {

       OBJ=dt;
       var adt = dt.value.split(".");
       var err = "Неправильный формат даты";

        if(adt.length !=3 || adt[2].length !=4 || adt[1].length !=2 || adt[0].length !=2) { 
          alert(err); dt.value="01.01.2001"; ST(); return false; 
       }

        if(new Date(adt[2]+"-"+adt[1]+"-"+adt[0])=="Invalid Date") { 
         alert(err); dt.value="01.01.2001";  ST(); return false; 
       }

         if(parseInt(adt[2])>2099 || parseInt(adt[2])<2001)  { alert(err); dt.value="01.01.2001";  ST(); return  false; }

         return true;
     }

    function TestSubmit() {

     if(!TestData(gE("id_dt1"))) return false; // И так проверяем каждое поле с датой 
     if(!TestData(gE("id_dt2"))) return false; // ...

     if(gE("id_fio").value == "") {            // И так проверяем каждое другое поле
       alert("Поле ФИО пустое"); 
       return false; 
     } 


     return true;

    }

  </script>

</head>

<body>
<br><br>
<center>
<form id="form1" method="post" onsubmit="return TestSubmit()">
  Дата: &nbsp; &nbsp; &nbsp; <input id="id_dt1" type="text" name="data1" value="01.01.2001" onblur="TestData(this)"><br>
  <br>
  Дата: &nbsp; &nbsp; &nbsp; <input id="id_dt2" type="text" name="data2" value="01.01.2001" onblur="TestData(this)"><br>
  <br>
  Ф.И.О.: &nbsp; <input id="id_fio" type="text" name="fio" ><br>
  <br>
  <input type="submit" value="Отправить">
</form>
</center>

</body>
</html>

Всё работает, но в Фоксе и в ИЕ-8 если ввести "левую" дату и нажать на клаве <Enter> (не покидая поля) то 2 раза выскакивает alert() с сообщением о неправильной дате. Хотя в Опере только один alert(). Как убрать этот "лишний" алерт?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования