Есть ли способ использовать Thickbox с динамическим контентом? - PullRequest
6 голосов
/ 03 ноября 2008

Вот сценарий:

У меня есть текстовое поле и кнопка на веб-странице. Когда кнопка нажата, я хочу открыть всплывающее окно (используя Thickbox), в котором будут показаны все элементы, соответствующие значению, введенному в текстовом поле. В настоящее время я использую IFrame для реализации Thickbox. Проблема заключается в том, что отображаемый URL-адрес жестко запрограммирован в атрибуте «alt» кнопки. Мне действительно нужно, чтобы атрибут «alt» передавал значение из текстового поля всплывающему окну.

Вот код на данный момент:

<input type="textbox" id="tb" />
<input alt="Search.aspx?KeepThis=true&TB_iframe=true&height=500&width=700" class="thickbox" title="Search" type="button" value="Search" />

В идеале я хотел бы поместить значение текстового поля в URL-адрес Search.aspx, но я не могу понять, как это сделать. Моя текущая альтернатива состоит в том, чтобы использовать jQuery для установки функции нажатия кнопки «Поиск» для вызова веб-службы, которая будет устанавливать некоторые значения в сеансе ASP.NET. Страница Search.aspx будет затем использовать переменные сеанса для выполнения поиска. Однако это немного странно, поскольку кажется, что всегда будет возможность выполнить поиск до того, как будут установлены переменные сеанса.

Ответы [ 4 ]

10 голосов
/ 03 ноября 2008

Просто обработайте нажатие кнопки, чтобы запустить функцию, которая вызывает tb_show(), передавая значение текстового поля. Что-то вроде

... onclick = "doSearch()" ...

function doSearch()
{
    tb_show(caption, 'Search.aspx?KeepThis=true&q=\"' +
            $('input#tb').val() +
            '\"&TB_iframe=true&height=500&width=700');
}
2 голосов
/ 23 июня 2009

Если вы читаете руководство в разделе содержимого iframe, оно говорит вам, что ваши параметры должны идти перед параметром TB_iframe. Все, что после этого сорвано.

0 голосов
/ 25 марта 2009

В коде вы также можете просто программно добавить тег alt,

button1.Attributes.Add("alt", "Search.aspx?KeepThis=true&TB_iframe=true&height=500&width=700");
0 голосов
/ 03 ноября 2008

Вот идея. Я не думаю, что это очень красиво, но должно работать:

$('input#tb').blur(function(){ 
  var url = $('input.thickbox').attr('alt');
  var tbVal = $(this).val();

  // add the textbox value into the query string here
  // url = ..

  $('input.thickbox').attr('alt', url);

});

По сути, вы обновляете тег alt кнопки каждый раз, когда текстовое поле теряет фокус. Вместо этого вы также можете прослушивать нажатия клавиш и обновлять их после каждого.

Что касается обновления строки запроса, я позволю вам выяснить лучший способ. Я вижу, как можно поместить туда заполнитель, например: & TB = TB_PLACEHOLDER. Тогда вы можете просто заменить строку.

...