JQuery Fancybox не работает после обратной передачи

У меня есть Fancybox (или, точнее,) несколько необычных коробок на странице asp.net.

Мой Fancybox (плагин jquery) работает нормально до тех пор, пока на странице не произойдет обратная передача, а затем она отказывается работать.

Есть предположения? Кто-нибудь испытывал подобное поведение?

ОБНОВЛЕНИЕ: немного кода…

У меня есть повторитель с привязкой к базе данных с коробкой для каждого повторяющегося элемента.

Они создаются (вне ретранслятора)

$(document).ready(function() {
            $("a.watchvideo").fancybox({
            'overlayShow': false,
            'frameWidth' : 480,
            'frameHeight' : 400
            });
        }); 

Тег привязки повторяется ..

href = "# watchvideo _‹% # Eval ("VideoId")%> "

Как и div с

id="watchvideo_<%#Eval("VideoId") %>

Как элемент сценария, который создает флэш-ролики.

Да, VideoIds выводятся на страницу.

ОБНОВЛЕНИЕ: это не проблема со вспышкой.

Это не проблема со вспышкой, поскольку я пробовал использовать ее без вспышки, она даже не выскакивает окно с простым сообщением.

ОБНОВЛЕНИЕ: интересно, это панель обновлений.

Повторная привязка событий в jQuery после обновления Ajax (updatepanel)

- Ли


person Lee Englestone    schedule 25.09.2009    source источник
comment
Пожалуйста, опубликуйте ошибочный код, чтобы мы могли помочь. Без кода все, что мы можем сделать, это предположить   -  person catsby    schedule 25.09.2009


Ответы (5)


Проблема заключается в использовании $(document).ready() для привязки fancybox. Этот код выполняется только один раз, когда страница изначально загружена. Если вам нужна функциональность fancybox при каждой обратной передаче, синхронной или асинхронной, замените $(document).ready() на pageLoad(sender, args). т.е.

function pageLoad(sender, args) {
        $("a.watchvideo").fancybox({
        'overlayShow': false,
        'frameWidth' : 480,
        'frameHeight' : 400
        });
}

см. этот ответ для получения дополнительной информации

person Russ Cam    schedule 25.09.2009
comment
Ура, Расс, похоже, ты бы решил мою проблему, если бы я не добрался туда один. Очень признателен. Ура, - Ли - person Lee Englestone; 25.09.2009
comment
Без проблем, рад помочь. Я настоятельно рекомендую изучить ссылки на другой ответ - статья хорошо читается, и документация по ASP.NET AJAX может оказаться чрезвычайно полезной. - person Russ Cam; 25.09.2009
comment
Спасибо, у меня возникла эта проблема, и я еще не очень хорошо разбираюсь в jQuery. Это решило это! Большое спасибо за размещение этого. - person Frank Hale; 15.07.2010
comment
+1 Мне это очень помогло. Я также новичок в jQuery и пытался собрать примеры, и ваш ответ заполнил мои пробелы. Спасибо! - person Deverill; 16.02.2012

Может быть, код создания экземпляра вставляется в часть кода, которая не запускается после обратной передачи?

person Ropstah    schedule 25.09.2009
comment
Интересно .. код создания экземпляра fancybox находится на странице aspx .. Я могу попробовать записать его на страницу из кода позади .. - person Lee Englestone; 25.09.2009

Это была панель обновления, как описано

здесь .. Повторная привязка событий в jQuery после обновления Ajax (updatepanel)

Как и предполагалось, я просто заменил

$(document).ready(function() {
            $("a.watchvideo").fancybox({
            'overlayShow': false,
            'frameWidth' : 480,
            'frameHeight' : 400
            });
        });

с участием

function pageLoad(sender, args)
{
   if(args.get_isPartialLoad())
   {
       $("a.watchvideo").fancybox({
            'overlayShow': false,
            'frameWidth' : 480,
            'frameHeight' : 400
            });

   }
}

и это сработало!

- Ли

person Lee Englestone    schedule 25.09.2009

Это может помочь кому-то другому, но FancyBox добавляет свой код к элементу ‹body› ... что все в порядке, но находится ВНЕ элемента asp.net ‹form›. Мои проблемы с обратной передачей исчезли, когда я изменил FancyBox, добавив его объекты dom к элементу ‹form›:

$('body form:first').append( ... );
person Ryan Wheale    schedule 27.04.2010

У меня была аналогичная проблема с постраничным просмотром сетки. Первая страница сетки запускала fancybox, а оставшаяся нет.

Я подумал, что это может быть проблема, связанная с UpdatePanel, которая обновляет только часть экрана.

Я решил проблему, заменив это:

 <script>
        $(document).ready(function () {

            $("a.small").fancybox();

        });
    </script>

с этим:

  <script>
        function pageLoad(sender, args) {
            $("a.small").fancybox();
        };
    </script>
person Michele Ferracin    schedule 23.07.2013