0

エスケープキーを押してモーダルポップアップボックスを非表示にしたいと思います。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 タグがないとわからないことです。どうすればこれを行うことができますか。何か案は?

4

2 に答える 2

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)");

そしてそれはうまくいきました!

于 2013-04-07T10:17:15.123 に答える
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 に答える