Como especificar o javascript para ser executado quando ModalPopupExtender é mostrado
-
08-06-2019 - |
Pergunta
O ASP.NET AJAX ModalPopupExtender tem OnCancelScript
e OnOkScript
propriedades, mas não parece ter uma OnShowScript
propriedade.Gostaria de especificar uma função javascript para ser executada sempre que o pop-up for exibido.
Em situações passadas, eu defini o TargetControlID
para um controle fictício e fornecer meu próprio controle que primeiro executa algum código JS e depois usa os métodos JS para mostrar o pop-up.Mas, neste caso, estou mostrando o pop-up do código do lado do cliente e do servidor.
Alguém sabe uma maneira de fazer isso?
Aliás, eu precisava disso porque tenho uma caixa de texto no modal que quero transformar em um editor TinyMCE.Mas o script de inicialização do TinyMCE não funciona em caixas de texto invisíveis, então tive que encontrar uma maneira de executá-lo no momento em que o modal foi mostrado
Solução
hmmm...Eu sou com certeza que tem evento exibido para o MPE...isso está na minha cabeça, mas acho que você pode adicionar um manipulador de eventos ao evento mostrado em page_load
function pageLoad()
{
var popup = $find('ModalPopupClientID');
popup.add_shown(SetFocus);
}
function SetFocus()
{
$get('TriggerClientId').focus();
}
não tenho certeza se isso irá ajudá-lo a chamá-lo do lado do servidor
Outras dicas
Esta é uma maneira simples de fazer isso na marcação:
<ajaxToolkit:ModalPopupExtender
ID="ModalPopupExtender2" runat="server"
TargetControlID="lnk_OpenGame"
PopupControlID="Panel1"
BehaviorID="SilverPracticeBehaviorID" >
<Animations>
<OnShown>
<ScriptAction Script="InitializeGame();" />
</OnShown>
</Animations>
</ajaxToolkit:ModalPopupExtender>
Você deve usar o ID do comportamento valor mpeBID
do seu ModalPopupExtender.
function pageLoad() {
$find('mpeBID').add_shown(HideMediaPlayer);
}
function HideMediaPlayer() {
var divMovie = $get('<%=divMovie.ClientID%>');
divMovie.style.display = "none";
}
Se você estiver usando um botão ou hiperlink ou algo para acionar o pop-up, você também poderia adicionar um manipulador adicional ao evento onClick do gatilho, que ainda deve disparar o pop-up modal e executar o javascript ao mesmo tempo?
O ModalPopupExtender modifica o botão/hiperlink que você diz ser o elemento "gatilho".O script onclick que adiciono aciona antes que o pop-up seja mostrado.Quero que o script seja acionado depois que o pop-up for exibido.
Além disso, ainda me deixa com o problema de quando mostro o modal do lado do servidor.
Tinymce Trabalho em caixa de texto invisível se você a esconder com CSS (display: Nenhum;) você faz um evento "OnClick" no TargetControlid, para init Tinymce, se você usar também um UpdatePanel
Para dois formulários modais:
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();
}
Lado do servidor:entregar
protected void btnNuevo_Click(object sender, EventArgs e)
{
//Para recuperar el formulario modal desde el lado del sercidor
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "key", "<script>launchModal('" + ModalPopupExtender_Factura.ID.ToString() + "');</script>", false);
}
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();
}