2010-09-28 185 views
1

我有以下代碼:jQuery的日期選擇器 - beforeShowDay問題

$(document).ready(function(){ 

    $(".datepicker").each(function() { 

    $(this).datepicker({ 
    beforeShowDay: function(date){ return [$(this).parent().find("span.days").html(), ""] }, 

    }); 
    }); 

    }); 

有了這個機身碼...

<div> 
<span class="days">(date.getDay() == 1 || date.getDay() == 4)</span> 
<input type="text" class="datepicker"> 
</div> 


<div> 
<span class="days">(date.getDay() == 2 || date.getDay() == 5)</span> 
<input type="text" class="datepicker"> 
</div> 

我希望能夠做的就是讓每個日期選擇器有不同的天可拾取。

我試圖做到這一點的方式(在一個範圍內放置beforeShowDay代碼的不同部分)可能不是最優雅的,所以請隨意分開我的代碼並在必要時進行更改。

回答

3

你可以創建一個對象保持可揀選日子裏,類似這樣的:

var pickable = { dp1: [1, 4], dp2: [2, 5] }; 
$('.datepicker').each(function() { 
    $(this).datepicker({ 
    beforeShowDay: function(date){ 
     var day = date.getDay(), days = pickable[this.id]; 
     return [$.inArray(day, days) > -1, ""]; 
    } 
    }); 
});​ 

You can give it a try here。該dp1dp2是controls..or任何屬性,你可以映射真的,像這樣的標識:

<input type="text" class="datepicker" id="dp1"> 
<input type="text" class="datepicker" id="dp2"> 

這個概念很簡單,取ID來獲得天的數組,這個選擇器,然後使用$.inArray()來查看我們正在進行的那一天是否在該陣列中。如果可以共享這些日期選擇,請不要使用ID,而應對此屬性執行類似data-pickerType的操作,並在上面的代碼中將this.id替換爲$(this).attr("data-pickerType")

注意:我離開了.each()完好無損,因爲我知道你需要它在當前問題之外的原因。

+0

這就行了!謝謝 – Tom 2010-09-28 12:01:40