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

HTML+CSS+JavaScript

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

 

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

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

тема: ввод даты в форму
 
 автор: ren   (16.05.2007 в 12:53)   письмо автору
 
 

можно сделать ввод даты по маске в форму к примеру "ДД.ММ,ГГГГ" если можно то как???

   
 
 автор: bronenos   (16.05.2007 в 14:47)   письмо автору
 
   для: ren   (16.05.2007 в 12:53)
 

var now = new Date();
document.form.input.value = now.getDay() + '.' + now.getMonth() + '.' + now.getFullYear();

   
 
 автор: ren   (16.05.2007 в 15:34)   письмо автору
 
   для: bronenos   (16.05.2007 в 14:47)
 

если нетрудно то можно поподробнее... и можно сделать чтоб пользователь не мог вводить не числа

   
 
 автор: ilyaILF   (16.05.2007 в 15:36)   письмо автору
 
   для: ren   (16.05.2007 в 15:34)
 

http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=37408&page=2

   
 
 автор: ilyaILF   (16.05.2007 в 16:22)   письмо автору
 
   для: ilyaILF   (16.05.2007 в 15:36)
 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Sample</title>
<script type="javascript"> 
var i=0;
function nowdate(obj,evt) 

    if(i!=(obj.value.length-1))i=obj.value.length-1;

    if(evt.keyCode>='48'&&evt.keyCode<='57'||evt.keyCode>='97'&&evt.keyCode<='105'){
        if(i<10){
            if(i==2||i==5){
            obj.value=obj.value.substring(0,obj.value.length-1)+'.';
            }
        i+=1;
        }else{obj.value=obj.value.substring(0,obj.value.length-1);}
    }else{
    obj.value=obj.value.substring(0,obj.value.length-1);
    }

</script>
</head>
<body>
<input name="myinput" onkeyup="nowdate(this,event);" value="ДД.ММ.ГГГГ" onfocus="this.value='';" />
<span style="cursor:pointer;text-decoration: underline;" onclick="var now=new Date();document.getElementsByName('myinput')[0].value=now.getDay()+'.'+now.getMonth()+'.'+now.getYear();">текущая дата</span>
</body>
</html>
Небольшие добавления - см. в начале функции, для возможности удаления и повторного ввода данных.

   
 
 автор: ren   (16.05.2007 в 22:43)   письмо автору
 
   для: ilyaILF   (16.05.2007 в 16:22)
 

Cпасиб большое за помощь!

   
 
 автор: ilyaILF   (16.05.2007 в 22:52)   письмо автору
 
   для: ren   (16.05.2007 в 22:43)
 

Только допишите в код <script type="text/javascript">.

   
 
 автор: ren   (17.05.2007 в 01:50)   письмо автору
 
   для: ilyaILF   (16.05.2007 в 22:52)
 

а можно что нибудь прикрутить еще в скрипт чтоб пользователь не смог ввести ничего кроме
"ХХ.ХХ.ХХХХ" где Х - цифра ??

   
 
 автор: ilyaILF   (17.05.2007 в 02:26)   письмо автору
 
   для: ren   (17.05.2007 в 01:50)
 

А сейчас скрипт разве не тоже делает?!! Пользователь может ввести в него только 8 цифр, точки проставляются автоматически, а буквы стираются при вводе.
Ввод "текущая дата" можно вообще убрать.

   
 
 автор: CNT   (17.05.2007 в 07:54)   письмо автору
 
   для: ren   (17.05.2007 в 01:50)
 

Ну вот вам скрипт, который не даст ввести что-либо отличное от маски, заодно проверит правильность ввода по количеству дней в месяце, с учетом високосности года...да ещё и не отстанет, покуда не будет введена корректная дата:
<script>
function mFunc (x)
{
var F = 2007; //максимально допустимый год
function E (y)
   {
   if (navigator.userAgent.indexOf ('MSIE') > 0) document.getElementById ('mIframe').src = '';
   O.value = V.substr (0, y);
   return;
   }
var M = 'dd.dd.dddd', D = '202121221212'.split (''), O = document.mForm.mDate, V = O.value, j = 0;
if (x && V.length < M.length) {alert ('Введите дату в формате ДД.ММ.ГГГГ'); O.focus (); O.value += ''; return}
if (!V) return; if (V.length > M.length) {V = V.substr (0, M.length); O.value = V}
while (j < V.length)
if (!V.charAt (j).replace (new RegExp ('\\' + M.charAt (j)), '').length)
   {
   if (j == 0 && V.charAt (0) * 1 > 3) {E (0); break}
   if (j == 1 && (V.substr (0, 2) * 1 == 0 || V.substr (0, 2) * 1 > 31)) {E (0); break}
   if (j == 3 && V.charAt (3) * 1 > 1) {E (3); break}
   if (j == 4 && (V.substr (3, 2) * 1 == 0 || V.substr (3, 2) * 1 > 12)) {E (3); break}
   if (j == 4 && (V.substr (0, 2) * 1 > (D [V.substr (3, 2) * 1 - 1] * 1 + 29))) {E (3); break}
   if (j == 6 && V.charAt (6) * 1 > F.toString ().charAt (0) * 1) {E (6); break}
   if (j == 9 && (V.substr (6, 4) * 1 == 0 || V.substr (6, 4) * 1 > F)) {E (6); break}
   if (j == 9 && V.substr (6, 4) * 1 % 4 != 0 && V.substr (0, 2) * 1 == 29 && V.substr (3, 2) * 1 == 2) {E (6); break}
   j++;
   }
else {E (j); break}
}
</script>
<form name="mForm">
Введите дату в формате ДД.ММ.ГГГГ: <input name="mDate" onkeyup="mFunc (0)" onpaste="setTimeout ('mFunc (1)', 0)" onchange="mFunc (1)" onblur="mFunc (1)">
<iframe style="display: none" id="mIframe"></iframe>
<br><input value="прочее">
...
</form>


Но вообще-то, требовать от клиента ввода даты в определённом формате - не есть хорошо.
Люди все разные - кто-то привык писать "1 мая 2007 года", кто-то "01.05.07", кто-то "2007.05.01"... вариантов много. Кроме того, большинство пишет, не глядя на экран монитора, а смотря на клавиатуру.
ИМХО, значительно лучше использовать три селекта: год, месяц, день (именно в таком порядке, чтобы использовать функцию динамической подстановки нужного количества дней в месяце с учетом високосности года).

UPDATE: Эксплорер (при включённых динамиках) ещё будет и постукивать при нажатии "не тех" клавиш (для того и добавлен невидимый IFRAME).

   
 
 автор: ren   (17.05.2007 в 14:49)   письмо автору
 
   для: CNT   (17.05.2007 в 07:54)
 

Благодарю за помощь! все работает отлично

   
Rambler's Top100
вверх

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