2010-08-17 24 views
8

Projem için jQuery-ui datepicker'ı kullanmak istiyorum, ancak geçerli tarihlerin birden çok, ayrık aralığına sahip olabilmem gerekiyor. Bu aralıklardan birinde olmayan tarihler seçilemez olmamalıdır.jQuery ui: Tarih seçici için birden fazla aralık?

$(function() { 
$("#datepicker").datepicker({ 
    numberOfMonths: 1, 
    minDate: new Date(2010, 8, 1), //range 1 
    maxDate: new Date(2010, 8, 20) //range 1 
    minDate: new Date(2010, 9, 1), //range 2 
    maxDate: new Date(2010, 9, 20) //range 2 
}); 
}); 

Bunu uygulamak için nasıl giderim? Herhangi bir yardım için minnettar olurum.

cevap

22

Böyle aylarca görüntülerken aralığını sınırlamak beforeShowDay kullanabilirsiniz:

var d1s = new Date(2010, 8, 1), 
    d1e = new Date(2010, 8, 20), 
    d2s = new Date(2010, 9, 1), 
    d2e = new Date(2010, 9, 20); 

$(function() { 
    $("#datepicker").datepicker({ 
    numberOfMonths: 1, 
    beforeShowDay: function(date) { 
     return [(date >= d1s && date <= d1e || date >= d2s && date <= d2e), '']; 
    }, 
    minDate: d1s, 
    maxDate: d2e 
    }); 
});​ 

You can give it a try here


Veya, burada tarih herhangi sayısı için biraz daha az verimli ama daha esnek bir yaklaşım aralıklar:

var ranges = [ { start: new Date(2010, 8, 1), end: new Date(2010, 8, 20) }, 
       { start: new Date(2010, 9, 1), end: new Date(2010, 9, 20) }, 
       { start: new Date(2010, 10, 1), end: new Date(2010, 10, 20) } ]; 

$(function() { 
    $("#datepicker").datepicker({ 
    numberOfMonths: 1, 
    beforeShowDay: function(date) { 
     for(var i=0; i<ranges.length; i++) { 
      if(date >= ranges[i].start && date <= ranges[i].end) return [true, '']; 
     } 
     return [false, '']; 
    }, 
    minDate: ranges[0].start, 
    maxDate: ranges[ranges.length -1].end 
    }); 
});​ 

You can give this version a try here, aralıkları kronolojik sıraya koymanız yeterlidir :)

+3

İnsan ... Seni seviyorum! aradığım şey bu, thx =) –

+0

İkinci yaklaşım dinamik aralıklar için en iyisidir. Gerçekten iyi! – Marco