0

我想通过按转义键隐藏模式弹出框。我找到了一种适用于包含正文标签的页面(不是内容页面)的方法;使用下面的函数,以及 body 标签的 onkeypress 事件。



    function catchEsc(e) {
            var kC = (window.event) ?    // MSIE or Firefox?
                 event.keyCode : e.keyCode;
            var Esc = (window.event) ?
                27 : e.DOM_VK_ESCAPE // MSIE : Firefox
            if (kC == Esc) {
                var mpu = $find('ModalPopupExtender1');
                mpu.hide();
            }
        }

问题是我正在使用内容页面,如果没有正文标签,我不知道,我该怎么做。有任何想法吗?

4

2 回答 2

0

此代码也适用于内容占位符,无需在代码后面添加处理程序

    function pageLoad(sender, args) {
        if (!args.get_isPartialLoad()) {
            //  add our handler to the document's
            //  keydown event
            $addHandler(document, "keydown", onKeyDown);
        }
    }

    function onKeyDown(e) {
        if (e && e.keyCode == Sys.UI.Key.esc) {
            $find('popPAlert').hide();
            $find('ModalPopupThemeView').hide();
            $find('AlPopUp').hide();
            $find('Mod_Error').hide();
            $find('Mod_preview').hide();
        }
    }
</script>
于 2013-04-07T08:33:56.113 回答
0

我自己解决了这个问题,如下所示:

  • 在母版页中,我将 body 标记设为服务器控件(id="myBody" runat="server")。

  • 在内容页面(aspx)中,

    • 我将模态弹出窗口的 ClientIDMode 设置为静态,
    • 我添加了 javascript 函数 catchEsc(e):


    function catchEsc(e) {
            var kC = (window.event) ?    // MSIE or Firefox?
                 event.keyCode : e.keyCode;
            var Esc = (window.event) ?
                27 : e.DOM_VK_ESCAPE // MSIE : Firefox
            if (kC == Esc) {
                var mpu = $find('ModalPopupExtender1');
                mpu.hide();
            }
        }

  • 最后在内容页面的代码后面,我将下面的代码添加到page_Load:


    HtmlGenericControl body = 
              (HtmlGenericControl)this.Page.Master.FindControl("myBody");
    body.Attributes.Add("onkeypress", "catchEsc(event)");

它奏效了!

于 2013-04-07T10:17:15.123 回答