,您好,
我希望在第二个日历打开或日历字段失去焦点时隐藏第一个日历。问题是,如果用户没有从日历中选择任何日期并转到页面中的其他控件,则日历不会隐藏,只有当用户从弹出窗口隐藏的日历中选择任何日期时。此捕获显示了问题。
我看到在ajaxtoolkit calendarextender示例页面中,日历控件工作正常,当弹出隐藏时从一个日历到另一个日历,但我找不到此页面的示例代码。我认为当焦点丢失时,这个页面在javascript中管理事件,但我找到了任何示例代码或项目......
提前谢谢!
答案 0 :(得分:2)
正如Yuri所提到的,使用ImageButton修复了这个......或者......
您需要处理onmouseout事件。你可以这样做:
http://forums.asp.net/p/1182269/4708411.aspx/1?Re+Calendarextender+and+Lose+Focus+Or+Mouse+Out
或者你可以添加一些javascript(通过jQuery)并注入一个onmouseout事件:
Adding extra functions to an image's onmouseout attribute
这也显示在forums.asp.net链接中,但基本上,在onmouseout事件中,您可以将日历扩展程序的可见性设置为隐藏或无。
答案 1 :(得分:2)
除了破折号提供的解决方案之外,如果您不想对PopupButton使用ImageButton
而不是Image
,则可以使用以下决定:set OnClientShowing
的扩展程序上的"hideAnotherOpenedPoups"
属性,并添加到下面的页面脚本中。
// Array of BehaviorIds of each extender for those you use Image as PopupButton
var behaviorIds = ["CalendarExtender1", "CalendarExtender2"];
function hideAnotherOpenedPoups(sender) {
for (var index = 0; index < behaviorIds.length; index++) {
if (behaviorIds[index] !== sender.get_id()) {
var extender = $find(behaviorIds[index]);
if (extender.get_isOpen()) {
extender.hide.call(extender);
}
}
}
}
答案 2 :(得分:1)
尝试使用以下代码行在文本框和图像上单击显示日历。
<asp:TextBox runat="server" onclick="showCalendar();" onfocusout="showCalendar();" ID="txtDate" />
<asp:ImageButton runat="Server" ID="imgPopup" AlternateText="Click to show calendar" />
<cc1:CalendarExtender ID="CalendarExtender1" runat="server" TargetControlID="txtDate" CssClass="MyCalendar" Format="MMMM d, yyyy" PopupButtonID="imgPopup" />
并添加像这样的javascript函数
<script type="text/javascript">
function showCalendar() {
$( "#<%=imgPopup.ClientID %>" ).trigger( "click" ); //I've used .ClientID here just in case your page is inherited from a Master page
}
</script>
单击文本框时应显示日历,单击表单上的任何其他位置后将隐藏日历