Как запустить событие из Thickbox, не закрывая его? - PullRequest
0 голосов
/ 26 сентября 2011

Я работаю с Thickbox, где мне нужно использовать элементы управления asp, а также вызывать события соответствующих элементов управления.Недавно я столкнулся с такой проблемой, как события asp control не запускаются при использовании в Thickbox.Ниже приведена пошаговая процедура по моей проблеме:

  1. Мне нужно запустить событие нажатия кнопки asp из толстой коробки, не закрывая толстую коробку.

  2. Чтобы решить # 1, я использовал следующий скрипт:

      function doPostBack(element) {
        tb_remove();
        setTimeout('__doPostBack(\'' + element.name + '\',\'\')', 500);
    }
    
  3. # 2 запускает событие и закрывает окно Thickbox.Мне нужно отобразить метку в окне Thickbox, и закрытие окна делает это невозможным.

Я попробовал метод tb_show () для отображения thicbox, но окно будет отображаться при отладке только с помощью firebugкнопка закрытия не будет работать тогда.Любые предложения будут полезны ...

1 Ответ

0 голосов
/ 26 сентября 2011

Сначала немного информации о том, зачем нужен ваш оригинальный обходной путь.

Большинство из этих модальных диалоговых плагинов, таких как Thickbox, извлекают ваш div, содержащий содержимое диалога, из исходного места в DOM, и снова прикрепляют его под тегом body. Это в основном связано с тем, чтобы наложение позади всплывающего окна отображалось правильно.

Одним из побочных эффектов этого, особенно на странице ASP.NET, где все находится только в ОДНОМ теге формы, является то, что ваши элементы управления формой больше не находятся внутри тега <form>. Поэтому, когда вы нажимаете кнопку для отправки формы, ничего не происходит (потому что она не находится внутри формы, которую она может отправить).

Обнаруженный выше обходной путь, который является самым простым решением, сначала закрывает Thickbox, так что содержимое вашей формы теперь возвращается в исходное положение в DOM внутри тега <form>. Затем он инициирует отправку формы. Он использует тайм-аут, чтобы убедиться, что у диалогового окна была возможность правильно закрыться, прежде чем пытаться отправить.

Если вы хотите, чтобы диалоговое окно Thickbox оставалось открытым во время обратной передачи, вам нужно разобраться с реальной проблемой, описанной выше. Один из способов заключается в том, чтобы на самом деле не выполнять обратную передачу, а вместо этого использовать AJAX для вызова веб-службы / метода со значениями из полей формы. Другой вариант - изменить файл Thickbox.js, чтобы все внутри тега формы . Третий вариант - добавить еще одну страницу с вашей формой, а затем загрузить ее в Thickbox в iframe.

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

Надеюсь, это поможет вам найти решение вашей конкретной ситуации.


Оригинальный ответ на оригинальный вопрос об открытии картотеки без стандартного тега ссылки

Вы пробовали следующее?

tb_show('Title for thickbox','WHATEVER-YOU-WOULD-NORMALLY-PUT-IN-THE-HREF');

Я не использую Thickbox, но эта функция используется внутри системы, когда вы нажимаете на ссылку.

...