2008-08-07 13 views
26

ASP.NET AJAX ModalPopupExtender tiene propiedades OnCancelScript y OnOkScript, pero no parece tener una propiedad OnShowScript. Me gustaría especificar una función de JavaScript para que se ejecute cada vez que se muestre la ventana emergente.Cómo especificar javascript para ejecutar cuando se muestra ModalPopupExtender

En situaciones pasadas, establecí el TargetControlID en un control ficticio y proporciono mi propio control que primero tiene algún código JS y luego usa los métodos JS para mostrar el emergente. Pero en este caso, estoy mostrando la ventana emergente del código del lado del cliente y del servidor.

¿Alguien sabe de una manera de hacer esto?

Por cierto, necesitaba esto porque tengo un cuadro de texto en el modal que quiero hacer un editor de TinyMCE. Pero el script de inicio de TinyMCE no funciona en cuadros de texto invisibles, así que tuve que encontrar una manera de ejecutarlo en el momento en que se mostró el modal

+0

Ellos espectáculo cómo SUBIR un evento manualmente, no cómo adjuntarlo: http://www.asp.net/ajaxlibrary/act_modalpopup.ashx ... invaluable – rdmptn

Respuesta

26

hmmm ... Estoy bastante seguro de que hay un evento de muestra para la MPE ... esta es la parte superior de la cabeza, pero creo que se puede agregar un controlador de eventos para el evento se muestra en Page_Load

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

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

no estoy seguro aunque si esto le ayudará con llamándolo desde el lado del servidor aunque

+0

add_shown() simplemente me ahorró un montón de esfuerzo y funcionó perfectamente !! –

+6

¡Impresionante! También tuve que agregar 'Sys.Application.add_load (pageLoad); 'a mi página para conseguir que se dispare el' pageLoad() ' – Jorin

+0

Sólo para añadir a @Jorin: He añadido mi Javascript a través de la ejecución y la add_shown trabajaría cuando se realiza una devolución de datos parcial (utilizando una actualización panel) sin embargo, sería no cuando se realiza una devolución de datos completa (debido a los controles dinámicos que desencadenan la MPE que se muestra). Agregar Sys.Application.add_load (pageLoad); línea justo antes de que mi javascript lo hiciera funcionar incluso en la devolución de datos de página completa. – yougotiger

0

Si está utilizando un botón o hipervínculo o algo para activar la ventana emergente. , ¿podría agregar también un controlador adicional al evento onClick del desencadenador que todavía debe activar el menú emergente modal y ejecutar el javascript al mismo tiempo?

+0

Puede mostrar la ventana emergente desde el código JS del lado del cliente, por lo que sin requiriendo una devolución de datos. Supongo que podrías ejecutar código JS adicional de esa manera. –

0

ModalPopupExtender modifica el botón/hipervínculo que diga que es el elemento "desencadenante". La secuencia de comandos onclick que agrego activa antes de que aparezca la ventana emergente. Quiero que se inicie la secuencia de comandos después de que se muestre la ventana emergente.

Además, todavía me deja con el problema de cuando muestro el modal del lado del servidor.

0

trabajo TinyMCE en cuadro de texto invisible si oculta con CSS (display: none;) haces un evento "onclick" en TargetControlID, para init TinyMCE, si también utiliza un panel de actualización

8

Debe usar el valor de BehaviorID ("mpeBID") de su ModalPopupExtender.

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

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

+1 por mencionar el BehaviorID – Jorin

8

Aquí está una manera sencilla de hacerlo en el marcado:

<ajaxToolkit:ModalPopupExtender 
       ID="ModalPopupExtender2" runat="server" 
       TargetControlID="lnk_OpenGame" 
       PopupControlID="Panel1" 
       BehaviorID="SilverPracticeBehaviorID" > 
      <Animations> 
       <OnShown> 
        <ScriptAction Script="InitializeGame();" /> 
       </OnShown> 
      </Animations>     
</ajaxToolkit:ModalPopupExtender> 
+2

Recibo el siguiente error: "La animación en TargetControlID =" hiddenButtonPopup1 "usa la propiedad AjaxControlToolkit.ModalPopupExtender.OnShown que no existe o no se puede establecer". hiddenButtonPopup1 es un botón oculto que se asigna a TargetControlID. –

0
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(); 
} 
+0

¿Cómo es esto mejor que la respuesta previamente aceptada por encima? – jszobody

0

Durante dos formas modales: lado

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(); 
} 

Servidor: behand

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); 
} 
Cuestiones relacionadas