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

ASP _ NET AJAX ModalPopupExtender
имеет свойства OnCancelScript
и OnOkScript
, но, похоже, не имеет свойства OnShowScript
. Я хотел бы указать функцию javascript для запуска каждый раз, когда отображается всплывающее окно.
В прошлых ситуациях я устанавливал фиктивный элемент управления TargetControlID
и предоставлял свой собственный элемент управления, который сначала выполняет некоторый код JS, а затем использует методы JS для отображения всплывающего окна. Но в этом случае я показываю всплывающее окно как из клиентского, так и из серверного кода.
Кто-нибудь знает, как это сделать?
Кстати, мне это было нужно, потому что у меня есть текстовое поле в модальном окне, которое я хочу сделать редактором TinyMCE. Но скрипт инициализации TinyMCE не работает с невидимыми текстовыми полями, поэтому мне пришлось найти способ запустить его во время показа модального окна.
Они показывают вам, как ВЫЗЫВАТЬ событие вручную, а не как к нему прикрепиться: asp _ net _ ajaxlibrary _ act_modalpopup.ashx ...бесценно.

8 ответов
хм... Я почти уверен, что для MPE есть событие displayed... это спонтанно пришло мне в голову, но я думаю, что можно добавить обработчик событий к событию displayed при загрузке страницы.
function pageLoad()
{
var popup = $find('ModalPopupClientID');
popup.add_shown(SetFocus);
}
function SetFocus()
{
$get('TriggerClientId').focus();
}
Я не уверен, что это поможет вам с вызовом со стороны сервера.
add_shown()
только что сэкономил мне кучу усилий и сработало отлично!!
Круто! Мне также пришлось добавить Sys.Application.add_load(pageLoad);
на свою страницу, чтобы она запустила pageLoad()
.
Просто добавлю к Jorin: я добавил свой javascript через среду выполнения, и add_shown
работал, когда был выполнен частичный постбэк (с использованием панели обновления), однако, он НЕ работал, когда был выполнен полный постбэк (из-за динамических элементов управления, запускающих показ MPE). Добавление строки Sys.Application.add_load(pageLoad);
непосредственно перед моим javascript заставило его работать даже при полностраничном постбэке.
Вам также может понадобиться некоторый тайм-аут в обработчике displayed, похоже, некоторая инициализация в самом popup extender происходит в тайм-ауте. Мне это было нужно для некоторых правильных расчетов размера.
Вот простой способ сделать это в разметке:
<ajaxToolkit:ModalPopupExtender
ID="ModalPopupExtender2" runat="server"
TargetControlID="lnk_OpenGame"
PopupControlID="Panel1"
BehaviorID="SilverPracticeBehaviorID" >
<Animations>
<OnShown>
<ScriptAction Script="InitializeGame();" />
</OnShown>
</Animations>
</ajaxToolkit:ModalPopupExtender>
Я получаю следующую ошибку: «Анимация TargetControlID="hiddenButtonPopup1"
использует свойство AjaxControlToolkit.ModalPopupExtender.OnShown
, которое не существует или не может быть задано». hiddenButtonPopup1
— это скрытая кнопка, назначенная на TargetControlID
.
У меня все отлично работает, и мне нравится решение, использующее только разметку, поскольку мой JS также находится в разметке.
Вам следует использовать значение BehaviorID
mpeBID
вашего ModalPopupExtender
.
function pageLoad() {
$find('mpeBID').add_shown(HideMediaPlayer);
}
function HideMediaPlayer() {
var divMovie = $get('<%=divMovie.ClientID%>');
divMovie.style.display = "none";
}
Если вы используете кнопку, гиперссылку или что-то еще для запуска всплывающего окна, можете ли вы также добавить дополнительный обработчик к событию триггера onClick
, который должен по-прежнему запускать модальное всплывающее окно и одновременно запускать JavaScript?
Вы можете показать всплывающее окно из клиентского кода JS, так что без необходимости постбэка. Я думаю, вы могли бы запустить дополнительный код JS таким образом.
ModalPopupExtender изменяет кнопку/гиперссылку, которую вы указываете как элемент "триггера". Скрипт onclick, который я добавляю, срабатывает до отображения всплывающего окна. Я хочу, чтобы скрипт срабатывал после отображения всплывающего окна.
Кроме того, у меня все еще остается проблема, когда я показываю модальное окно со стороны сервера.
TinyMCE работает с невидимым текстовым полем, если вы скрываете его с помощью css (display:none;
) Вы создаете событие «onclick» для TargetControlID, для init TinyMCE, если вы также используете updatepanel.
Для двух модальных форм:
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();
}
Серверная часть: 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);
}
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();
}
Чем это лучше ранее принятого ответа выше?
У меня есть объект JavaScript. Есть ли встроенный или общепринятый способ получить длину этого объекта? const myObject = new Object(); myObject["firstname"] = "Gareth"; myObject["lastname"] = "Simpson"; myObject["age"] = 21; Это отчасти правда, но так много людей привыкли к «ассоциативному массиву» PHP, что они могут предположить, что это означает «упорядоченную ассоциативную карту», хотя объекты JS на самом деле неупорядочены. В приведенном выше примере myObject.length не определен, по крайней мере в среде браузера. Вот почему он недействителен Варианты Object.{keys, values, entries}(obj).length были упомянуты в общей сложности 38 раз в 16 ответах плюс в комментариях к этому вопросу, и еще 11 раз в 7 удаленных ответах. Думаю, теперь достаточно. 44 ответа Обновленный ответ Вот обновление по состоянию на 2016 год и широкое распространение ES5 и далее. Для IE9+ и всех других современных браузеров…
Как опубликовать и затем перенаправить на внешний URL из ASP_Net?
Как опубликовать и перенаправить на внешний URL-адрес из ASP_Net? ASP_NET серверные элементы управления возвращают данные на свою собственную страницу. Это делает случаи, когда вы хотите перенаправить пользователя на внешнюю страницу, но по какой-то причине (например, для аутентификации) вам нужно сделать публикацию на этой странице, болезненными. Отлично работает HttpWebRequest , если вы не хотите перенаправлять, и JavaScript тоже хорош в некоторых случаях, но может оказаться сложным, если вам действительно нужен код на стороне сервера для сбора данных для публикации. Так как же вам одновременно разместить сообщение на внешнем…
Как настроить переключатель CSS
Я работаю над сайтом, который перейдет на новый стиль в установленную дату. Встроенный семантический HTML и CSS сайта, поэтому изменение должно потребовать только изменения ссылки CSS. Я работаю с дизайнером, которому нужно будет увидеть, как он выглядит, а также с клиентом, которому нужно будет просмотреть обновления контента в текущем виде, а также ход разработки нового вида. Я планирую использовать магическое значение строки запроса и/или ссылку javascript в нижнем…