jQuery不会在动态创建的图像上更改图像源属性

时间:2016-10-25 12:44:56

标签: javascript jquery html css image

我在点击我的页面时动态创建元素:

                <img
                  src="/imagecache/large/{{ $issue->first()->image  }}"
                  onclick="magazineDetail(
                    '{{ $issue->first()->magazine->id }}',
                    '{{ $issue->first()->magazine->name }}',
                    '{{ $issue->first()->magazine->summary ?: '' }}',
                    '{{ $issue->first()->magazine->image ?: '' }}',
                    '{{ $issue->first()->image  }}'
                    )"
                  >

我通过点击来调用此脚本:

function magazineDetail(id, name, summary, issueImage, magazineImage){
    images = [];
    nextImage = 0;
    loadedImages = [];

    $('#magazine-detail')[0].innerHTML = '<section id="magazine-detail" class="magazine-detail"><div class="large-6 medium-6 small-12 columns"><div class="magazine-hero"><img id="image" src="/imagecache/cover/' + magazineImage + '" alt="' + name + '" /><div class="magazine-preview-nav"><div class="right-arrow" id="forward"><img src="/img/right-arrow-black.svg" /><p>Neste utgivelse</p></div><div class="left-arrow" id="back"><img src="/img/left-arrow-black.svg" /><p>Forrige utgivelse</p></div></div></div></div><div class="large-6 medium-6 small-12 columns"><div class="row"><div class="small-6 columns magazine-title"><h1 id="name"></h1></div></div><p id="summary"></p><img id="issueImage" src="" alt="" /><p></p><button class="button primary expand">Kjøp abonnement - 1 måned gratis</button><button class="button secondary expand">Bla igjennom arkivet</button></div></section>';

    $('#image').attr({"src" : '/imagecache/cover/' + magazineImage, "alt" : name});
    $('#name').text(name);
    $('#summary').text(summary);

    if (issueImage != '') {
      $('#issueImage').html('<img src="/imagecache/medium/"' + issueImage + ' alt="' + name + '">');
    }

    $('html, body').animate({
        scrollTop: $("#magazine-detail").offset().top + 1500
    }, 1700);

    $.getJSON("issue/images",
        { id: id },
        function(result){
          if (result.length < 2){
              $('.magazine-preview-nav').hide();
          } else {
              $('.magazine-preview-nav').show();
          }
          $.each(result, function(i, value){
              images.push(value);
          });
          function imagePreload() {
              preload();
          };
    });

    console.log(images);
}

我在<div class="magazine-hero"><img id="image" src="/imagecache/cover/' + magazineImage + '" alt="' + name + '" />创建了$('#magazine-detail')[0].innerHTML

然后我有一个函数应该使用在点击时创建的id="image"来更改该元素的src。 这是负责这个的脚本:

$(document).ready(function () {
    imagesIndex = 0;
    nextImage = 0;
    loadedImages = new Array();

    function preload() {
      console.log('entered');
        for (i = 0; i < 2; i++) {
            if (nextImage < images.length) {
                var img = new Image();
                img.src = '/imagecache/cover/' + images[nextImage];
                loadedImages[nextImage] = img;
                ++nextImage;
            }
        }
    }

    $('#magazine-detail').on('click','#forward', function() {
      imagesIndex++;
      preload();

      if (imagesIndex > (loadedImages.length - 1)) {
          imagesIndex = loadedImages.length - 1;
      }
console.log(loadedImages.length);
console.log(loadedImages[imagesIndex].src);
      $('#image').attr({"src" : loadedImages[imagesIndex].src, "alt" : name});
    });

    $('#magazine-detail').on('click','#forward', function() {
        imagesIndex--;

        if (imagesIndex < 0) {
            imagesIndex = 0;
        }

        $('#image').attr({"src" : loadedImages[imagesIndex].src, "alt" : name});
    });
});

在检查console.logs时,我发现正在使用preload function创建新图像,并且正确的image src正在传递给: $('#image').attr({"src" : loadedImages[imagesIndex].src, "alt" : name});

但页面上的图像没有被更改。我还应该提一下,当我在页面加载后没有创建这些元素但是将它们隐藏起来时,一切正常。

1 个答案:

答案 0 :(得分:1)

似乎$(document).ready(function(){ });中存在一个小错误。

代码为同一按钮 #forward 提供了2个点击事件。可能应该将一个分配给 #back 按钮。