2011-01-27 19 views
6

Rails'de bir date_select oluşturdum (bunlar 3 seçim kutusu: biri yıl, biri ay diğeri gün için).Seçkin kutulardaki tarihleri ​​yeniden oluşturma

Onlara 31 Şubat sahip olmak oldukça kafa karıştırıcı. Mümkün olmak istediğim seçim kutularının yalnızca geçerli tarihlerle olması. Demek istediğim, 31 Ocak, 30, (ve 29 yıl sonra) seçimini yaptığınızda, Ocak'ı seçtiğinizde, tekrar eklenirler, vb. Ayrıca, ilk seçim kutularının yalnızca seçili ayın günlerinde doldurulmasını istiyorum.

Çok teşekkürler.

+0

Orada jquery biraz koymak istiyorum. – apneadiving

cevap

9

'day', 'month', 'year' sınıfları ile üç seçiminiz olduğunu varsayalım. O zaman bu JS kullanın:

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) 
}); 

Demo: http://jsfiddle.net/FxBpB/

+0

Bu çalışmayı birden çok öğe ile yapmamda bana yardımcı olabilir misiniz? Teşekkürler :) –

+0

@Rolpege, 3 seçimin her setinin etrafına sarmak için bir div'a ihtiyacınız olacak ve bu div'a "tarih" dersi verin, sonra ".closest (" date ") kullanın. "" .month "'i seçmek yerine"). En yakın dokümanlara bir göz atın: http://api.jquery.com/closest/ –

+0

Çok teşekkür ederim! –

İlgili konular