我在Rails中创建了一个date_select(这是3个选择框:一个用于一年,一个用于一个月,一个用于一天)。
2月31日对他们来说非常混乱。我希望能够使选择框只有有效日期。我的意思是,当您选择2月,31日,30日(以及某些年份29日)时,将删除,然后,当您选择1月时,它们会再次添加,依此类推。此外,我希望初始选择框仅填充所选月份的日期。
答案 0 :(得分: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)
});
答案 1 :(得分:1)
/* automatically update days based on month */
for (var i = 2014; i < 2019; i++) {
$('<option>').attr('value', i).text(i).appendTo('#start_year');
}
function monthChanged() {
debugger;
var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var month = $('#start_month').val() - 1,
year = +$('#start_year').val();
// Check for leap year if Feb
if (month == 1 && new Date(year, month, 29).getMonth() == 1)
days[1]++;
// Add/Remove options
if ($('#start_day option').length > days[month]) {
// Remove
$('#start_day option').slice(days[month] + 1).remove();
} else if ($('#start_day option').length < days[month] + 1) {
// Add
for (var i = $('#start_day option').length + 1; i <= days[month]; i++) {
$('<option>').attr('value', i).text(i).appendTo('#start_day');
}
}
}
monthChanged(); // On document ready
$('#start_month').change(monthChanged); // On month change
$('#start_year').change(monthChanged); // On year change (for leap years)
请参阅小提琴链接:http://jsfiddle.net/u3fr1mt0/