关于asp.net:当显示ModalPopupExtender时,如何指定要运行的javascript

关于asp.net:当显示ModalPopupExtender时,如何指定要运行的javascript

How to specify javascript to run when ModalPopupExtender is shown

ASP.NET AJAX ModalPopupExtender具有OnCancelScriptOnOkScript属性,但似乎没有OnShowScript属性。我想指定一个JavaScript函数,以在每次显示弹出窗口时运行。

在过去的情况下,我将TargetControlID设置为虚拟控件,并提供自己的控件,该控件首先执行一些JS代码,然后使用JS方法显示弹出窗口。但是在这种情况下,我同时显示了客户端和服务器端代码的弹出窗口。

有人知道这样做的方法吗?

顺便说一句,我需要这个,因为我在模式中有一个文本框,想要创建一个TinyMCE编辑器。但是TinyMCE初始化脚本不适用于不可见的文本框,因此我必须找到一种方法来显示模态时运行它


hmmm ...我很确定有一个MPE的显示事件...这已经超出我的脑海了,但是我认为您可以在page_load的显示事件中添加一个事件处理程序

1
2
3
4
5
6
7
8
9
10
function pageLoad()
{
    var popup = $find('ModalPopupClientID');
    popup.add_shown(SetFocus);
}

function SetFocus()
{
    $get('TriggerClientId').focus();
}

我不确定是否可以帮助您从服务器端通过

调用它


这是在标记中执行此操作的简单方法:

1
2
3
4
5
6
7
8
9
10
11
<ajaxToolkit:ModalPopupExtender
                ID="ModalPopupExtender2" runat="server"
                TargetControlID="lnk_OpenGame"
                PopupControlID="Panel1"
                BehaviorID="SilverPracticeBehaviorID"  >
            <Animations>
                <OnShown>
                     <ScriptAction Script="InitializeGame();" />  
                </OnShown>
            </Animations>                
</ajaxToolkit:ModalPopupExtender>

您应该使用ModalPopupExtender的BehaviorID值mpeBID

1
2
3
4
5
6
7
8
function pageLoad() {
    $find('mpeBID').add_shown(HideMediaPlayer);
}

function HideMediaPlayer() {
    var divMovie = $get('<%=divMovie.ClientID%>');
    divMovie.style.display ="none";
}

对于两种模式形式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var launch = false;
var NameObject = '';

function launchModal(ModalPopupExtender) {
    launch = true;
    NameObject = ModalPopupExtender;
}

function pageLoad() {
    if (launch) {
        var ModalObject = $find(NameObject);
        ModalObject.show();
        ModalObject.add_shown(SetFocus);
                }
}

function SetFocus() {
    $get('TriggerClientId').focus();
}

服务器端:behand

1
2
3
4
5
protected void btnNuevo_Click(object sender, EventArgs e)
{
    //Para recuperar el formulario modal desde el lado del sercidor
    ScriptManager.RegisterStartupScript(Page, Page.GetType(),"key","launchModal('" + ModalPopupExtender_Factura.ID.ToString() +"');", false);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var launch = false;

function launchModal() {
    launch = true;
}

function pageLoad() {
    if (launch) {
          var ModalPedimento = $find('ModalPopupExtender_Pedimento');
          ModalPedimento.show();
          ModalPedimento.add_shown(SetFocus);
    }
}

function SetFocus() {
    $get('TriggerClientId').focus();
}

如果您使用CSS隐藏,TinyMCE将在不可见的文本框中工作(显示:无;)
如果还使用了updatepanel

,则在初始化TinyMCE的TargetControlID上创建一个" onclick "事件


ModalPopupExtender修改按钮/超链接,您将其称为" trigger "元素。在显示弹出窗口之前,我添加的onclick脚本会触发。我希望在显示弹出窗口后触发脚本。

此外,当我从服务器端显示模式时,仍然留下我一个问题。


如果您使用按钮或超链接或其他东西来触发弹出窗口显示,是否还可以向触发器的onClick事件添加一个附加处理程序,该处理程序仍应触发模式弹出窗口并同时运行javascript?


推荐阅读