|
|
|
|
<!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">
Дата: <input autofocus type="text" name="data1" value="01.01.2001" onblur="TestData(this)"><br>
<br>
Ф.И.О.: <input type="text" name="fio"><br>
<br>
<input type="submit" value="Отправить">
</form>
</center>
</body>
</html>
|
Если ввести не корректно дату то курсор должен вернуться в поле даты. Так вот в Фоксе курсор переходит в следующее поле. В Опере 28 вроде остается в поле даты но его не видно, в Опере 12, ИЕ-8 и в Хроме всё нормально. Что за хрень? Что не так делаю? | |
|
|
|
|
|
|
|
для: 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)">
|
и, кстати, "неправильный" пишется слитно | |
|
|
|
|
|
|
|
для: яса_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()">
Дата: <input id="id_dt1" type="text" name="data1" value="01.01.2001" onblur="TestData(this)"><br>
<br>
Дата: <input id="id_dt2" type="text" name="data2" value="01.01.2001" onblur="TestData(this)"><br>
<br>
Ф.И.О.: <input id="id_fio" type="text" name="fio" ><br>
<br>
<input type="submit" value="Отправить">
</form>
</center>
</body>
</html>
|
Всё работает, но в Фоксе и в ИЕ-8 если ввести "левую" дату и нажать на клаве <Enter> (не покидая поля) то 2 раза выскакивает alert() с сообщением о неправильной дате. Хотя в Опере только один alert(). Как убрать этот "лишний" алерт? | |
|
|
|