丢失焦点时如何隐藏ajaxtoolkit calendarextender?

时间:2011-12-02 09:19:49

标签: asp.net calendarextender

calendarextender problem,您好,

我希望在第二个日历打开或日历字段失去焦点时隐藏第一个日历。问题是,如果用户没有从日历中选择任何日期并转到页面中的其他控件,则日历不会隐藏,只有当用户从弹出窗口隐藏的日历中选择任何日期时。此捕获显示了问题。

我看到在ajaxtoolkit calendarextender示例页面中,日历控件工作正常,当弹出隐藏时从一个日历到另一个日历,但我找不到此页面的示例代码。我认为当焦点丢失时,这个页面在javascript中管理事件,但我找到了任何示例代码或项目......

提前谢谢!

3 个答案:

答案 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>

单击文本框时应显示日历,单击表单上的任何其他位置后将隐藏日历