【发布时间】:2014-12-19 11:39:05
【问题描述】:
我有一个简单的目标。我可以通过创建一个干净的项目来模拟问题。
问题是我在动态设置文本框上的日期时无法正确设置asp.net calendarExtender显示日期(打开时)。
这是一个代码:
HTML:
<asp:Button
ID="Button1"
runat="server"
Text="2013"
OnClientClick="SetDate(0);return false;" />
<asp:Button
ID="Button2"
runat="server"
Text="2015"
OnClientClick="SetDate(1);return false;" />
<br />
<asp:TextBox
runat="server"
ID="tbDate"></asp:TextBox>
<asp:CalendarExtender
ID="clDate"
runat="server"
Enabled="True"
BehaviorID="calendarExtender"
TargetControlID="tbDate">
</asp:CalendarExtender>
JavaScript:
var Data = (function () {
var _items = [{ ID: 1, Date: "19/12/2013" },
{ ID: 2, Date: "19/12/2015" }];
function _GetAll() {
return _items;
}
function _GetByID(itemID) {
var o = $.grep(_items, function (el, i) {
return el.ID === itemID;
});
return o[0];
}
return {
GetByID: _GetByID,
GetAll: _GetAll
}
})();
function SetDate(itemID) {
var item = Data.GetByID(itemID);
var stringDate = item.Date;
var objectDate = Date.parseLocale(item.Date, "dd/MM/yyyy");
$("#tbDate").val(stringDate);
$find("calendarExtender").set_selectedDate(objectDate);
}
这应该尽可能简单,但控制接缝有自己的行为。 从我的结论来看,显示日期(打开时)总是假定最后选择的日期。不管你做什么。
一些场景:
-
场景 1
1-加载页面
双击文本框,打开日历扩展器。
3-日历扩展器假定当前日期。
4-点击 2013 按钮,文本框更新为 2013 日期。
在文本框上点击 5 次,打开日历扩展器.....仍然是 2014(当前日期)
-
场景 2
1-加载页面 2-点击 2013 按钮,文本框更新为 2013 日期。
3 次单击文本框,打开日历扩展器。
4 日历延长器假定为 2013 年(正确日期)。
5-点击 2015 按钮,文本框更新为 2015 日期。
3-点击文本框,打开日历扩展器.....仍然有 2013(第一个日期)
-
场景 3
(与 2 相同,但从按钮 2015 点击开始)
-
场景 4
1-加载页面
双击 2013 按钮,文本框更新为 2013 日期(请勿点击文本框)。
3-click 2015 按钮,文本框更新为 2015 日期。
在文本框上单击 4 次,打开日历扩展器.....假设 2015(最后日期)
注意:如果我使用
动态显示当前设置的日期alert($find("calendarExtender").get_selectedDate());
,没错。但是显示根本不会刷新。
这是正确的行为吗?我错过了什么吗?
我怎样才能让它假设正确的日期?
【问题讨论】:
标签: javascript asp.net calendarextender