0

I never used javascript in rails, and i have pretty basic questions about this matter. This is what i want to implement in my application:

"In my application, when a user is being created, s/he can select their birthdate by choosing a year, a month, and a day in three different drop-downs. Presently, the user is able to choose a future date as his birth date. I'm in need a way to check if the user is selecting a valid date and warn them in the event the date is invalid."

I would like to know what am i doing wrong. Thanks anyway!

In view (form):

<div class="control-group"> <%= f.label "Date of Birth (YYYY-MM-DD)", :class => 'control-label' %> <div class="controls"> <%= f.select :year_Of_Birth , options_for_select((Time.now.year - 100)..(Time.zone.now.year )), :include_blank => true, :id => "year",:onchange => 'validDate()'%> <%= f.select :month_Of_Birth, 1..12 , :include_blank=> true, :onchange => 'validDate()', :id => "month" %> <%= f.select :day_Of_Birth, 1..31 , :include_blank => true, :onchange => 'validDate()', :id => "day" %> </div> </div> 

In my application.js:

function validDate(){ var y = document.getElementById("year").value; var m = document.getElementById("month").value; var d = document.getElementById("day").value; if(m==2 && leapYear(y)==false && d>28) document.write("Invalid Date."); if(m==2 && leapYear(y)==true&& d>29) document.write("Invalid Date."); if(m==4 && d>30) document.write("Invalid Date."); if(m==6 && d>30) document.write("Invalid Date."); if(m==8 && d>30) document.write("Invalid Date."); if(m==9 && d>30) document.write("Invalid Date."); if(m==11 && d>30) document.write("Invalid Date."); } function leapYear(year) { return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); } 

    1 Answer 1

    1

    You could use the JavaScript's Date

    var y = document.getElementById("year").value; var m = document.getElementById("month").value; var d = document.getElementById("day").value; // selected date, the month has index of 0 var selectedDate = new Date(y, m - 1, d); // first day of next month var maxAllowedDateForMonth = new Date(y, m, 1); // date now to check for future dates var now = new Date; if (selectedDate < maxAllowedDateForMonth && selectedDate < now) { document.write("Invalid Date."); } 
    2
    • do you know if i'm calling the js function correctly ?CommentedDec 2, 2014 at 22:48
    • The function is called correctly, but ideally you'd use unobtrusive style of declaring JS events on JS files.
      – lugolabs
      CommentedDec 3, 2014 at 23:10

    Start asking to get answers

    Find the answer to your question by asking.

    Ask question

    Explore related questions

    See similar questions with these tags.