如何在内容页面中通过转义键隐藏模态弹出框

时间:2013-04-06 12:12:41

标签: escaping master-pages modalpopupextender content-pages

我想按下转义键隐藏模态弹出框。我找到了一种适用于包含body标签(不是内容页面)的页面的方法;使用下面的函数,以及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();
            }
        }

问题是我正在使用内容页面而且我不知道没有body标签,我该怎么做呢。 任何想法?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

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

  • 在内容页面(aspx)中,

    • 我将模态弹出窗口的ClientIDMode设置为static,
    • 我添加了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)");

它有效!