显示ModalPopupExtender时如何指定要运行的JavaScript

时间:2020-03-05 18:38:30  来源:igfitidea点击:

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

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

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

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

解决方案

回答

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

回答

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

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

回答

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

function pageLoad()
{
    var popup = $find('ModalPopupClientID');
    popup.add_shown(SetFocus);
}

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

我不确定这是否可以从服务器端调用它

回答

如果我们使用CSS将TinyMCE隐藏在不可见的文本框中(显示:无;)
如果我们还使用了updatepanel,则对初始化TinyMCE的TargetControlID进行" onclick"事件

回答

我们应该使用ModalPopupExtender的BehaviorID值" mpeBID"。

function pageLoad() {
    $find('mpeBID').add_shown(HideMediaPlayer);
}

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