-2

我正在尝试在开始日期和结束日期控件上使用 jquery 创建日期功能。我想选择开始日期,当在开始日期之前到达结束日期时,前一个日期将作为禁用我的代码如下。

$( "#" + TxtStrtDate,"#" + TxtExpDte" ).datepicker({
    defaultDate: "+1w",
    changeMonth: true,
    numberOfMonths: 3,
    onSelect: function( selectedDate ) {
        var option = this.id == "abc" ? "minDate" : "maxDate",

        instance = $( this ).data( "datepicker" ),
        date = $.datepicker.parseDate(
            instance.settings.dateFormat ||
        $.datepicker._defaults.dateFormat,
        selectedDate, instance.settings );

        dates.not( this ).datepicker( "option", option, date );
    }
});

请提出我的代码中的错误是什么。

4

2 回答 2

2

假设TxtStrtDateTxtExpDte是变量,那么您引用元素的方式是无效的。

对此进行更新:

$("#"+TxtStrtDate+", #"+TxtExpDte).datepicker({
...
});

这个带有建议代码的小提琴工作得很好!

这个没有当前代码的小提琴证明它不起作用!


如果它们实际上是元素 ID,请使用:

$("#TxtStrtDate, #TxtExpDte").datepicker({
...
});

请参阅此工作小提琴示例!

于 2012-06-09T14:59:32.627 回答
2

由于您提到这些是服务器控件,因此我假设您使用的是 ASP.NET。如果是这种情况并且您使用的是 MasterPages,MasterPages 会破坏控件的 id,因此您必须执行以下操作:

$('#<%= TxtStrtDate.ClientID %>, #<%= TxtExpDte.ClientID %>').datepicker({
...
});

否则,您的选择器中有一个额外的 " 并且您的 id 需要在引号内,除非它们实际上是 javascript 变量:

$( "#" + TxtStrtDate,"#" + TxtExpDte" )

应改为:

$("#TxtStrtDate, #TxtExpDte")
// or if they are javascript variables
$("#" + TxtStrtDate + ", #" + TxtExpDte)

编辑

根据您的评论,您似乎想使用 jquery datepicker 的日期范围版本。为此,您必须执行以下操作:

$( "#TxtStrtDate" ).datepicker({
    defaultDate: "+1w",
    changeMonth: true,
    numberOfMonths: 3,
    onSelect: function( selectedDate ) {
        $( "#TxtExpDte" ).datepicker( "option", "minDate", selectedDate );
    }
});
$( "#TxtExpDte" ).datepicker({
    defaultDate: "+1w",
    changeMonth: true,
    numberOfMonths: 3,
    onSelect: function( selectedDate ) {
        $( "#TxtStrtDate" ).datepicker( "option", "maxDate", selectedDate );
    }
});

查看jquery ui 站点上的日期范围演示以获取更多信息。

于 2012-06-09T15:05:51.523 回答