2011-01-27 2 views
6

Я создал date_select в Rails (который представляет собой 3 блока выбора: один за год, один на месяц и один на день).Репопуляция дат в ящиках выбора

Чтобы 31-го февраля на них было довольно запутанным. То, что я хочу иметь, - это иметь поля выбора только с действительными датами. Я имею в виду, что, когда вы выбираете 31-го, 30-го, 30-го (и в некоторые годы 29-го), удаляются, тогда, когда вы выбираете январь, они снова добавляются и т. Д. Кроме того, я хочу, чтобы начальные поля выбора заполнялись только днями выбранного месяца.

Большое спасибо.

+0

я положил немного JQuery там. – apneadiving

ответ

9

Предполагаю, что у вас есть три выбора с классами 'day', 'month', 'year'. Затем используйте этот JS:

function monthChanged() { 
    var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 
    var month = $('.month').val() - 1, year = +$('.year').val(); 
    var diff; 

    // Check for leap year if Feb 
    if (month == 1 && new Date(year, month, 29).getMonth() == 1) days[1]++; 

    // Add/Remove options 
    diff = $('.day option').length - (days[month] + 1); 
    if (diff > 0) { // Remove 
     $('.day option').slice(days[month] + 1).remove(); 
    } else if (diff < 0) { // Add 
     for (var i = $('.day option').length; i <= days[month]; i++) { 
      $('<option>').attr('value', i).text(i).appendTo('.day'); 
     } 
    } 
} 

$(function() { 
    monthChanged(); // On document ready 
    $('.month').change(monthChanged); // On month change 
    $('.year').change(monthChanged); // On year change (for leap years) 
}); 

Демо: http://jsfiddle.net/FxBpB/

+0

Можете ли вы помочь мне в создании этой работы с несколькими элементами? Спасибо :) –

+0

@Rolpege, вам понадобится div, чтобы обернуть вокруг каждого набора из 3-х избранных, и дать этому div класс, например «date», а затем использовать '.closest (« date »). Find (". Month ")' вместо прямого выбора '' .month''. Посмотрите на «ближайшую» документацию: http://api.jquery.com/closest/ –

+0

Большое спасибо! –

Смежные вопросы