<div> изображений, полученных getJSON, исчезают после добавления () - PullRequest
0 голосов
/ 16 апреля 2010

Я работаю над приложением GMaps для извлечения изображений через getJSON () и для заполнения всплывающего маркера.

Ниже приведена разметка, которую я добавляю к маркеру динамически:

<div id="images"></div>                 
<div id="CampWindow" style="display:none;width:550px;height:500px;">
<h4 id="camp-title"></h4>
<p>View... (all links open in new windows)</p>
<ul>
    <li><a id="camp-hp-link" target="_blank" href="">camp home page</a></li>
    <li>information: <a id="camp-av-link" target="_blank" href="">availability</a> | <a id="camp-vi-link" target="_blank" href="">vital information</li>
</ul>
<p id="message"></p>

Последние пару дней я царапал глаза и пытался заставить изображения отображаться в CampWindow. Затем я решил подумать о том, чтобы посмотреть, были ли изображения извлечены вообще. Затем я переместил изображения наружу и, как Боб (Надежда), изображения извлекались и обновлялись при каждом нажатии.

Итак, я решил сохранить изображения снаружи и затем, после загрузки, добавить их в CampWindow. Это не работает до сих пор; Когда я добавляю div к основному div CampWindow, изображения не отображаются. Я проверяю в Firebug указатель, и он показывает мне изображения как пустые. Я пробую это снова с изображениями снаружи, и это показывает изображения. Я пытался, прежде чем добавить и добавить, но безуспешно. Я что-то здесь упускаю?

У меня больше нет вау, чтобы вырваться. Пожалуйста, помогите.

  marker.clicked = function(marker){
    $("#images").html('');
    $('#camp-title').text(this.name);
    $('#camp-hp-link').attr('href', this.url);
    $('#camp-av-link').attr('href', this.url + '/tourism/availability.php');
    $('#camp-vi-link').attr('href', this.url + '/tourism/general.php');          

    // get resort images via jQuery AJAX call - includes/GetResortImages.inc.php
    $.getJSON('./includes/GetResortImages.inc.php', { park: this.park_name, camp: this.camp_name }, RetrieveImages);

    function RetrieveImages (data)
    {
      if ('failed' == data.status)
      {
        $('#messages').append("<em>We don't have any images for this rest camp right now!</em>");
      }
      else
      {
        if ('' != data.camp)
        {   
          $.each(data, function(key,value){
              $("<img/>").attr("src", value).appendTo('#images');
          }); 
        }
      }
    }
          //.append($("#images"));
    $("#CampWindow").show(); 
    var windowContent = $("<html />");              
    $("#CampWindow").appendTo(windowContent);        

    var infoWindowAnchor = marker.getIcon().infoWindowAnchor;
    var iconAnchor = marker.getIcon().iconAnchor;
    var offset = new google.maps.Size(infoWindowAnchor.x-iconAnchor.x,infoWindowAnchor.y-iconAnchor.y);
    map.openInfoWindowHtml(marker.getLatLng(), windowContent.html(), {pixelOffset:offset});             
  }
  markers.push(marker);
});

1 Ответ

2 голосов
/ 16 апреля 2010

Когда вы добавляете тег <html> на свою страницу, это сбивает с толку браузер и, скорее всего, является проблемой. Я бы посоветовал сделать то, что сказал Пойнти, и использовать window.open(), чтобы создать всплывающее окно (см. этот урок) , или, что еще лучше, попробовать один из многих плагинов для jQuery light box .


Я не уверен, что вы делаете с картами Google, поэтому я решил просто привести для вас базовый пример. С помощью этого сценария, если вы нажмете на изображение внутри #image div, откроется всплывающее окно того же размера, что и изображение.

$(document).ready(function(){
 $('#images img').click(function(){
  var padding = 20;
  var w = $(this).width() + padding;
  var h = $(this).height() + padding;
  var popup = '\
   <html>\
    <head>\
     <link type="text/css" href="popup-style.css" rel="stylesheet" />\
     <scr'+'ipt type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></scr'+'ipt>\
    </head>\
    <body>\
    <img src="' + $(this).attr('src') + '">\
    </body>\
   </html>';
  var pop = window.open('','Image View','toolbar=0,location=0,status=0,width=' + w + ',height=' + h + ',scrollbars=1,resizable=1');
  pop.document.write(popup);
  pop.document.close();
 })
});

ПРИМЕЧАНИЕ. При добавлении тега script в строку обязательно разбивайте слово «script», иначе вы получите ошибку.


Обновление № 2: Хорошо, так как вы хотите работать с тем, что у вас есть, попробуйте сделать это:

Удалите тег <html> из окна вашего кампуса, затем расположите окно вашего кампуса с помощью CSS и / или javascript. Добавить что-то вроде:

 var w = $(window).width();
 var h = $(window).height();
 // Add overlay and make clickable to hide popup
 // you can remove the background color and opacity if you want to make it invisible
 var $overlay = $('<div/>', {
  'id': 'overlay',
  css: {
   position   : 'absolute',
   height     : h + 'px',
   width      : w + 'px',
   left       : 0,
   top        : 0,
   background : '#000',
   opacity    : 0.5,
   zIndex     : 99
  }
 }).appendTo('body');
 // Position your popup window in the viewport
 $('#CampWindow').css({
  position: 'absolute',
  top     : $(window).scrollTop() + 50 + 'px',
  left    : w/2 - $('#CampWindow').width()/2 + 'px', // centers the popup
  zIndex  : 100
 })
 .fadeIn('slow');
 // Click overlay to hide popup
 $('#overlay').click(function(){
  $('#CampWindow').hide();
  $(this).remove(); // remove the overlay
 })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...