Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автодополнение даты в текстовом поле, Пишу день, получаю текущие месяц и год. 
:(
    Опции темы
Galina
Дата 27.6.2005, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.2.2005

Репутация: нет
Всего: нет



Как сделать, чтобы в текстовое поле txtDate, в которое должна вводиться дата, писать только две первые цифры (день), а месяц и год подставлялись текущие (автоматически).

В файле dato.js находится функция getDateInstance(strDate)

Код
<HTML>
<HEAD id="Heading">
<title id="PageTitle">Page1</title>
<script language="javascript" type="text/javascript" id="datoScript" src="dato.js"></script>
</HEAD>
</HTML>


Код вызова

txtDate.Attributes["onChange"] = "this.value = getDateInstance(this.value);";

В таком виде это не работает

Спасибо
Галина


PS
Код
function getDateInstance(strDate){
    if(strDate == null) return '';
    var nStringLength = strDate.length;
    if(nStringLength == 0) return '';
    var arrDate;
    
    if ((strDate.indexOf('-') > -1) && (strDate.indexOf('.') > -1))
        return '';
    
    if (strDate.indexOf('-') > -1)
        arrDate = strDate.split("-");
    else
        arrDate = strDate.split(".");
    
    var nArrLength = arrDate.length;
    if(nArrLength > 3) return '';
    var nDay = -1;
    var nMonth = -1;
    var nYear = -1;
    
    var d = new Date();
    var nCurrentDay = d.getDate();;
    var nCurrentMonth = d.getMonth() + 1;
    var nCurrentYear = d.getFullYear();

    if (strDate.indexOf("/") > -1) return '';
    
    if(nArrLength == 1) {
        if(nStringLength > 2 && nStringLength % 2 != 0) return '';
        nDay = parseInt(nStringLength <= 2 ? strDate : (parseInt(strDate.substr(0,1)) == 0) ? strDate.substr(1, 1) : strDate.substr(0, 2));
        if(nStringLength > 2) nMonth = parseInt((parseInt(strDate.substr(2,1)) == 0) ? strDate.substr(3,1) :strDate.substr(2,2));
        if(nStringLength > 4) nYear = parseInt(strDate.substr(4));
    }
    else {
        var strD = arrDate[0];
        nDay = parseInt(strD.length == 1 ? strD : (parseInt(strD) == 0 ? strD.substr(1,1) : strD));
        
        var strM = arrDate[1];
        nMonth = parseInt(strM.length == 0 ? -1 : (strM.length == 1 ? strM : (parseInt(strM) == 0 ? strM.substr(1,1) : strM)));
        
        if(nArrLength == 3){
            var strY = arrDate[2];
            nYear = parseInt(strY.length == 0 ? -1 : (strY.length == 1 ? strY : (parseInt(strY.substr(0,1)) == 0 ? strY.substr(1) : strY)));
        }
    }
    if(nDay == 0 || nDay > 31) return '';
    if(nMonth == -1) {
        nMonth = nCurrentMonth;
    }
    else if(nMonth == 0 || nMonth > 12) return '';
    
    var bSet = false;
    
    if (nYear < 100){ 
        if (nYear + 2000 == nCurrentYear){
            if (nMonth == nCurrentMonth && nDay >= nCurrentDay){
                nYear += 2000;
                bSet = true;
            }
            if ((nMonth > nCurrentMonth) && !bSet){
                nYear += 2000;
                bSet = true;
            }
        }
        if ((nYear + 2000 > nCurrentYear) && !bSet){
            nYear += 2000;
        }
    }
    
    if(nYear == -1)
        nYear = nCurrentYear;
    
    if(!isValidDate(nDay, nMonth, nYear)) return '';
    return dateToString(nDay, nMonth, nYear);
}

PM MAIL   Вверх
diam
Дата 28.6.2005, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 6
Всего: 16



Galina, используй кнопку Код

Для начала, заменим
Цитата(Galina @ 27.6.2005, 15:29)
txtDate.Attributes["onChange"] = "this.value = getDateInstance(this.value);";

на
Код

if ( txtDate.addEventListener ) txtDate.addEventListener("change", function a  (evt)  {evt.target.value = getDateInstance(evt.target.value);}, false);
else txtDate.attachEvent("onchange", function a  (evt)  {event.srcElement.value = getDateInstance(event.srcElement.value); });


Я надеюсь, что функция getDateInstance() работает, потому что я её не смотрел smile

Это сообщение отредактировал(а) diam - 28.6.2005, 12:29
PM MAIL   Вверх
Galina
Дата 28.6.2005, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.2.2005

Репутация: нет
Всего: нет



Большое спасибо за ответ, но, вставив этот код, я получила сообщение о нескольких синтаксических ошибках - скобки и function a .
Пожалуйста, как мне их исправить?

Спасибо
Галина
PM MAIL   Вверх
diam
Дата 28.6.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 6
Всего: 16



Да, извиняюсь, пофиксил. Теперь работает (правда, я так и не знаю, работает ли функция getDateInstance() или нет, я вместо неё свою подставил. См. ниже).
Код

function getDateInstance ( par ) {
        return par + ' -- добавка -- ';
}

PM MAIL   Вверх
Sardar
Дата 28.6.2005, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Просто создали новый обьект Date, можно даже заплнить второй, тогда ещё проверка на ошибки будет:
Код
<script type="text/javascript">
function fullDate(str) {
  var ret;
  if((ret=/^\s*([0-9]+)\s*$/.exec(str))==null||isNaN(ret=parseInt(ret[1]))||ret>31) return "";
  var d=new Date();
  var en=new Date(d.getYear(), d.getMonth(), ret);
  return en.toLocaleDateString(); //здесь форматируем дату, используй что угодно
}
</script>

<input id="dat" type="text" onchange="this.value=fullDate(this.value)" />



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0755 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.