Как указать JavaScript для запуска при отображении ModalPopupExtender
-
08-06-2019 - |
Вопрос
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();
}