Простой JavaScript не выполняется? - PullRequest
1 голос
/ 08 февраля 2010

Что может быть причиной того, что функция validateDate() не выполняется при вызове?

Цель validateDate() - взять строку типа 01/01/2001 и вызвать isValidDate(), чтобы определить, является ли дата действительной.

Если он недействителен, появится предупреждающее сообщение.

 function isValidDate(month, day, year){
    /*
    Purpose: return true if the date is valid, false otherwise

    Arguments: day integer representing day of month
    month integer representing month of year
    year integer representing year

    Variables: dteDate - date object

    */
    var dteDate;

    //set up a Date object based on the day, month and year arguments
    //javascript months start at 0 (0-11 instead of 1-12)
    dteDate = new Date(year, month, day);

    /*
    Javascript Dates are a little too forgiving and will change the date to a reasonable guess if it's invalid. We'll use this to our 
    advantage by creating the date object and then comparing it to the details we put it. If the Date object is different, then it must
    have been an invalid date to start with...
    */

    return ((day == dteDate.getDate()) && (month == dteDate.getMonth()) && (year == dteDate.getFullYear()));
 }

 function validateDate(datestring){

     month = substr(datestring, 0, 2);
     day   = substr(datestring, 2, 2);
     year  = substr(datestring, 6, 4);

     if(isValidDate(month, day, year) == false){
         alert("Sorry, " + datestring + " is not a valid date.\nPlease correct this.");
         return false;
     } else {
         return true;
     }
 }

Ответы [ 3 ]

7 голосов
/ 08 февраля 2010

substr сама по себе не является функцией; Вы должны использовать string.substr(start_index, length).

Так как метод JavaScript substr принимает только два параметра, а не три, это приводит к остановке выполнения в первой строке substr, и вы никогда не получите вывод этой функции.

Я нашел это, открыв Firebug при запуске кода на тестовой HTML-странице. Я настоятельно рекомендую использовать Firebug для отладки JavaScript.

Попробуйте это в вашей функции validateDate или что-то подобное:

month = datestring.substr(0, 2);
day   = datestring.substr(3, 2);
year  = datestring.substr(6, 4);
0 голосов
/ 08 февраля 2010

Глядя на ваш код, ваш формат даты "MMDD__YYYY". Итак, ваша функция должна быть следующей:

 function isValidDate(month, day, year){
    /*
    Purpose: return true if the date is valid, false otherwise

    Arguments: day integer representing day of month
    month integer representing month of year
    year integer representing year

    Variables: dteDate - date object

    */
    var dteDate;

    //set up a Date object based on the day, month and year arguments
    //javascript months start at 0 (0-11 instead of 1-12)
    dteDate = new Date(year, month, day);
    alert(d)

    /*
    Javascript Dates are a little too forgiving and will change the date to a reasonable guess if it's invalid. We'll use this to our 
    advantage by creating the date object and then comparing it to the details we put it. If the Date object is different, then it must
    have been an invalid date to start with...
    */

    return ((day == dteDate.getDate()) && (month == dteDate.getMonth()) && (year == dteDate.getFullYear()));
 }

 function validateDate(datestring){

     month = datestring.substring(0, 2);
     day   = datestring.substring(2, 4);
     year  = datestring.substring(6, 10);
     alert(year)

     if(isValidDate(month, day, year) == false){
         alert("Sorry, " + datestring + " is not a valid date.\nPlease correct this.");
         return false;
     } else {
         return true;
     }
 }
validateDate("0202__2010");

Если ваша дата в более обычном формате, вы можете сделать следующее, чтобы проверить if ((new Date("MM/DD/YYYY")) != "Invalid Date")

0 голосов
/ 08 февраля 2010

substr не определено ... вам нужно

datestring.substr(0, 2);

у вас также есть проблема со второй подстрокой - она ​​должна начинаться с символа 3:

day   = substr(datestring, 3, 2);

и, месяцдействительно должно быть (месяц - 1), когда вы создаете дату

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...