2010-09-28 140 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