2012-04-11 53 views
0

我在我的JSP中有以下代码,并且我使用knockout js来绑定这些变量。日期选择器在第一个组件上没有显示点击

我的JS是

calender: function() { 
    console.log("in calender"); 
    var dates = $("#from1, #to1").datepicker({ 
    defaultDate: "+1w", 
    changeMonth: true, 
    numberOfMonths: 1, 
    onSelect: function (selectedDate) { 
     var option = this.id == "from" ? "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); 
    } 
}); 
}, 

,而JSP是

<div class="DateRange"> 
<label for="from">From</label> 
<input type="text" id="from" name="from" data-bind="click: calender, value: starDate"/> 
<label for="to">to</label> 
<input type="text" id="to" name="to" data-bind="click: calender, value: endDate"/> 
</div> 

压延方法获取调用当我点击开始或结束的最后一天,但问题是日期无论是第一次,picker都不会显示在fisrt组件上单击(只是单独调用方法),无论它是否为id。从下一次点击第二个组件,只有日期选择器正常。我在这里失踪的任何事情?

+0

见我的回答如下,输入是不是datapicker(),直到日历法第一次运行时,它初始化datapicker为输入。在第二次单击数据添加器时,它会在第一次通过日历方法时初始化。 – 2012-04-11 16:06:24

回答

0

用几句话 1.将数据分析器初始化移出日历方法。 2.每个字段,它会显示相应的日期选择器即:

$("#from1, #to1").datepicker({ 
    defaultDate: "+1w", 
    changeMonth: true, 
    numberOfMonths: 1, 
    onSelect: function (selectedDate) { 
     var option = this.id == "from" ? "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); 

     } 
    });  

    ........ 

    calenderFrom: function() { 
    $("#from1").datepicker("show"); 
    } 
    calenderTo: function() { 
    $("#to1").datepicker("show"); 
    } 

<input type="text" id="from" name="from" data-bind="click: calenderFrom, value: starDate"/> 
<input type="text" id="to" name="to" data-bind="click: calenderTo, value: endDate"/> 

UPD 我假设你使用jQueryUI的日期选择器创建两个单独的方法。如果是这样,你并不需要手动显示它;只是初始化它

+0

有没有办法在同一个日历方法中初始化datepicker?将这些作为单独的方法在我们的视图模型中为js提供编译错误。 – Mercy 2012-04-17 06:01:05

+0

你能告诉我你的代码吗? – 2012-04-17 08:41:45

0

它不会触发,因为输入实际上不是一个datapicker(),直到它第一次通过日历方法。第二次单击输入是一个datapicker,因为它是在日历方法的第一遍上设置的。

为什么不这样做,而不是采用日历法这样的:

$("#from1, #to1").datepicker({...}); 
相关问题