Como especificar o javascript para ser executado quando ModalPopupExtender é mostrado

StackOverflow https://stackoverflow.com/questions/5482

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

Foi útil?

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();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top