2010-12-02 16 views
3

J'ai le code ci-dessous et ce que je dois faire est de charger l'image de la href dans une div via ajax ... Toute aide appréciée. Je crois que load() ne peut pas charger des images comme ça?Puis-je obtenir l'image et charger via ajax dans div

<ul id="list"> 
    <li class="list-item-1"><a href="images/image1.jpg">Image 1</a></li> 
    <li class="list-item-2"><a href="images/image2.jpg">Image 2</a></li> 
    <li class="list-item-3"><a href="images/image3.jpg">Image 3</a></li> 
    <li class="list-item-4"><a href="images/image4.jpg">Image 4</a></li> 
    </ul> 
<div id="image-holder"></div> 

Un grand merci, C

+1

Vous ne chargez pas vraiment d'images via ajax. Chaque image fera sa propre demande pour l'image via l'attribut src. Si vous changez l'image src via JavaScript, elle chargera la nouvelle image. DutrowLLC est sur la bonne voie. – Gregg

Répondre

11

Vous devez aussi supprime l'image actuellement ajoutée. Ici c'est avec un événement click et Image au lieu d'ajouter un balisage.

$('#list li a').click(function() { 
    var url = $(this).attr('href'), 
    image = new Image(); 
    image.src = url; 
    image.onload = function() { 
     $('#image-holder').empty().append(image); 
    }; 
    image.onerror = function() { 
     $('#image-holder').empty().html('That image is not available.'); 
    } 

    $('#image-holder').empty().html('Loading...'); 

    return false; 
}); 
+0

Merci à tous. La raison pour laquelle j'ai mentionné ajax/load() est parce qu'il détecte quand une image a été chargée, s'il y a eu une erreur etc. Ce que je voudrais faire est de montrer un préchargeur jusqu'à ce que l'image soit chargée. Retirez ensuite le préchargeur et supprimez l'image originale pour en montrer une nouvelle. Possible? –

+0

J'ai modifié le message d'origine avec le message de chargement et d'erreur. L'objet Image DOM a des erreurs et des événements de chargement: http://www.w3schools.com/jsref/dom_obj_image.asp – mqsoh

+0

Très bien! a l'avantage de forcer une charge ajax que si vous le relancez à la même URL il ne recharge pas (mon cas d'utilisation charge une image d'aperçu d'un service Web qui dessine l'image en fonction des paramètres de requête, donc c'est un gros plus – Adam

3

Ce serait la première chose que je voudrais essayer, je suis aussi un peu un débutant aussi bien que:

var image = $('<img></img>'); 
image.attr('src', 'images/image1.jpg'); 
$('#image-holder').append(image); 
0

Si vous voulez changer l'image utiliser dynamiquement dom Ce que vous devez faire est de changer l'attribut img src

disent img_div est votre élément parent puis

var im = document.createElement('img'); 
im.src = 'image_path1'; 
img_div.appendChild(im); 

sur un événement si vous voulez changer cette image

im.src = 'image_path2' 
1

OK. Sale mais ça fonctionne parfaitement. Quelques modifications comme ajouter les images comme images de fond. C'est ici et j'espère que ça aide quelqu'un d'autre! Merci beaucoup à tous.

<script type="text/javascript"> 
$(function(){ 
    var list = $("#list"); 
    var li = list.children(); 
    var lengthMinusOne = li.length - 1; 
    var index = 0; 
    var num = $("#list li").length; 
    var prevLi = $(li[0]).css("background-color", "gray"); 

    $("#next").click(function(){ 
     index++; 
     if (index > lengthMinusOne) index = 0; 
     prevLi.css("background-color","white"); 
     prevLi = $(li[index]).css("background-color", "gray"); 

     //Trigger a href click 
     $(prevLi).children('a').trigger('click'); 

     //Display class in console 
     var myClass = $(prevLi).attr("class"); 
     console.log(myClass); 
    }); 
    $("#prev").click(function(){ 
     index--; 
     if (index < 0) index = lengthMinusOne; 
     prevLi.css("background-color","white"); 
     prevLi = $(li[index]).css("background-color", "gray"); 

     //Trigger a href click 
     $(prevLi).children('a').trigger('click'); 

     //Display class in consol 
     var myClass = $(prevLi).attr("class"); 
     console.log(myClass); 
    }); 


    //Loader 
    loader = $('#loader'); 
    loader.hide(); 
    var firstImg = $('<img />'); 
    $(firstImg).attr('src',$('#list li a').attr('href')); 
    $('#image-holder').append(firstImg); 

    //get image and load into div 
    $('#list li a').click(function(event) {       
     //Add class to image within holder 
     oldImg = $('#image-holder img').addClass('old'); 
     newImg = $('<img />'); 

     $(newImg).attr('src',$(this).attr('href')); 
     //remove old image and show loader 
     $(oldImg).fadeOut().remove(); 
     loader.show(); 

     $(newImg).bind({ 
      load: function() {   
       //console.log("Image loaded"); 
       //Hide loader before fading in image 
       loader.hide(); 
       $('#image-holder').append(newImg).hide().fadeIn(1300); 
      }, 
      error: function() { 
       //console.log("Error thrown, image didn't load, probably a 404."); 
      } 
     }); 

     event.preventDefault(); 
    }); 


}) 
</script> 
+0

Si vous pouvez penser à un rangement, ce serait génial, juste pour obtenir une charge de page encore plus rapide. –