我有inline calender配置为允许多个日期选择。我想根据文本框的值动态设置可选字段的数量。这是我的js代码
var handle;
$(function () {
Date.format = 'yyyy-mm-dd';
setDatePicker();
});
$("#numField").live('click', function () {
setDatePicker();
});
function setDatePicker() {
//$("#multimonth").destroy();
handle = $('#multimonth')
.datePicker(
{
createButton: false,
inline: true,
closeOnSelect: false,
selectMultiple: true,
numSelectable: $("#numField").val()==""?3:$("#numField").val()
}
)
.bind(
'click',
function () {
$(this).dpDisplay();
this.blur();
return false;
}
)
.bind(
'dateSelected',
function (e, selectedDate, $td, state, selectedDates) {
var dotes = $('#multimonth').dpGetSelected();
for (i = 0; i < dotes.length; i++) {
dotes[i] = dotes[i].asString();
}
var dates = dotes.join(",");
alert(dates);
$("#hiddenDate").val(dates);
}
)
}
我有一个id =“numField”的输入字段,想要在输入字段的change事件中更改datepicker的numSelectable参数。我在其API中找不到任何方法。提前谢谢
答案 0 :(得分:3)
API中没有任何内容可以更改numSelectable
,但您可以自己添加这样的内容,而无需花费太多精力。
如果查看源代码,您会在对象文字中看到一堆dp*
个函数:
dpSetDisabled : function(s)
{
//...
},
dpSetStartDate : function(d)
{
//...
},
// ...
所以只需将此列表添加到列表中:
dpSetNumSelectable: function(n) {
return _w.call(this, 'setNumSelectable', n);
}
然后,进一步向下,您将看到在另一个对象文字中定义setStartDate
,setEndDate
等的位置,因此只需将setNumSelectable
定义添加到该列表中:
setNumSelectable: function(n) {
if(n <= 0) {
// Sanity checking is left as an exercise for the reader.
}
if(this.numSelected > n) {
// What to do in this case is also left as an exercise for
// the reader. All the pieces you need to do something sensible
// here are available and nearby in the source.
}
this.numSelectable = n;
}
然后,您应该可以根据需要更改numSelectable
选项:
$('#multimonth').dpSetNumSelectable(some_integer);
不要害怕学习和修改你使用的工具的源代码,毕竟这是开源软件的重点。您甚至可以向作者发送一个补丁,该补丁添加了您所需的功能,从而帮助其他人帮助您(这是开源软件的另一个点)。