Как указать JavaScript для запуска при отображении ModalPopupExtender

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

Вопрос

ASP.NET AJAX. МодальныйPopupExtender имеет OnCancelScript и OnOkScript свойства, но, похоже, у него нет OnShowScript свойство.Я хотел бы указать функцию javascript, которая будет запускаться каждый раз, когда отображается всплывающее окно.

В прошлых ситуациях я устанавливал TargetControlID к фиктивному элементу управления и предоставить свой собственный элемент управления, который сначала выполняет некоторый код JS, а затем использует методы JS для отображения всплывающего окна.Но в данном случае я показываю всплывающее окно как из клиентского, так и из серверного кода.

Кто-нибудь знает, как это сделать?

Кстати, мне это нужно, потому что у меня есть текстовое поле в модальном окне, которое я хочу создать в редакторе TinyMCE.Но сценарий инициализации TinyMCE не работает с невидимыми текстовыми полями, поэтому мне пришлось найти способ запустить его во время отображения модального окна.

Это было полезно?

Решение

хм...Я достаточно уверен что есть показанное событие для MPE...это не пришло мне в голову, но я думаю, что вы можете добавить обработчик событий к показанному событию на page_load

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

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

хотя я не уверен, поможет ли это вам вызвать его со стороны сервера

Другие советы

Вот простой способ сделать это в разметке:

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

Вам следует использовать Идентификатор поведения ценить mpeBID вашего ModalPopupExtender.

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

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

Если вы используете кнопку, гиперссылку или что-то еще, чтобы вызвать всплывающее окно, не могли бы вы также добавить дополнительный обработчик к событию onClick триггера, который все равно должен запускать модальное всплывающее окно и одновременно запускать javascript?

ModalPopupExtender изменяет кнопку/гиперссылку, которую вы указываете как элемент «триггер».Сценарий onclick, который я добавляю, запускает перед отображением всплывающего окна.Я хочу, чтобы скрипт запускался после отображения всплывающего окна.

Кроме того, у меня все еще остается проблема, когда я показываю модальное окно со стороны сервера.

Tinymce работает над невидимым текстовым полетом, если вы скрываете его с помощью CSS (Display: None;) Вы делаете событие «OnClick» на TargetControlid, для init tinymce, если вы используете также panepanel

Для двух модальных форм:

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

Серверная часть:вручную

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();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top