Проблема с заменой Jquery Slimbox и изображений AJAX

#jquery #ajax #lightbox #livequery #slimbox

#jquery #ajax #Лайтбокс #livequery #slimbox

Вопрос:

Сначала я упомяну, что я просмотрел бесчисленное количество вопросов и ответов, многие из которых, казалось бы, логически работают.

У меня возникла проблема с slimbox и AJAX. Я выполняю простую замену изображений, и когда я это сделаю, slimbox не будет работать для вновь добавленного изображения.

Я перепробовал много вещей, начиная с вызова Live Query (дополнение jquery) и заканчивая простой попыткой повторной привязки или повторного вызова slimbox.

Будем признательны за любую помощь или предложения. Возможно, включение моего точного сценария в контекст поможет связать одно из уже существующих решений для решения моей проблемы. До сих пор я не смог их включить.

Шаг 1: У меня есть php-код, генерирующий мою страницу с основным изображением, для которого slimbox отлично работает:

 <div id="productMainImage" class="centeredContent back">
    <a href="images/large/redwhiteandyou_LRG.jpg" rel="lightbox-g" title="Red White and You"><img src="images/medium/redwhiteandyou_MED.jpg" alt="Red White and You" title=" Red White and You " width="250" height="167"><br><span class="imgLink">larger image</span></a>
</div>
  

Шаг 2: У меня создан набор изображений атрибутов, в котором я вызываю свой ajax-код для выполнения замены изображений. Это выполняет некоторую обработку и в основном устанавливает innerhtml #productMainImage следующим образом:

 <div id="productMainImage" class="centeredContent back">
    <a id="Yellow" href="images/large/attributes/redwhiteandyou_yellow_LRG.jpg" rel="lightbox-g" title="Yellow"><img src="images/medium/attributes/redwhiteandyou_yellow_MED.jpg" alt="Yellow" title=" Yellow " width="250" height="167"><br><span class="imgLink">larger image</span></a>
</div>
  

Обмен работает нормально, и изображение меняется. Большой вопрос в том, как я могу убедиться, что это изображение связано с slimbox.

Я попробовал несколько вещей (не ограничиваясь ими!):

Вставка javascript в код, вызываемый ajax для записи html:

 $(document).ready(function() {
    $('#content').find("a[rel^='lightbox']").slimbox({}, null, function(el) {
        return (this == el) || ((this.rel.length > 8) amp;amp; (this.rel == el.rel));
    });
});
  

или

 $("a[rel^='lightbox']").livequery(function(){
    $("a[rel^='lightbox']").slimbox({/* Put custom options here */}, null, function(el) {
    return (this == el) || ((this.rel.length > 8) amp;amp; (this.rel == el.rel));
    }), function() {
        //remove slimbox? this is called when elements no longer match
    }
});
  

Я также пытался вставить код на свою страницу, пытаясь выполнить аналогичные действия.

У кого-нибудь есть какие-либо предложения?

Ответ №1:

Что ж, я продолжал пытаться решить эту проблему и обнаружил, что я делал неправильно. Основное недопонимание в потоке того, как AJAX обновлял страницу. Я подключил вызов slimbox к следующей функции в коде AJAX, и теперь он работает!

 function stateChanged() { 
  if (xmlHttp.readyState==4){    
    var product_color_image=xmlHttp.responseText;
    if(product_color_image!=''){
    document.getElementById('productMainImage').innerHTML = product_color_image;
    }
    $("a[rel^='lightbox']").slimbox({
      <?php require_once(DIR_FS_CATALOG . DIR_WS_CLASSES . 'zen_lightbox/options.php'); ?>
    }, function(el){
      return [el.href, el.title /*   '<br /><a href="'   el.href   '">Download this image</a>'*/];
       }, function(el) {
            return (this == el) || ((this.rel.length > 8) amp;amp; (this.rel == el.rel));
          }), function() {
                //remove slimbox? this is called when elements no longer match
              }
    }
}
  

Мне нужно проработать несколько более тонких деталей, но, по крайней мере, теперь мои изображения отображаются в лайтбоксе после того, как я выполнил AJAX-замену основного изображения продукта!