2009-09-08 8 views
1

HTML:problème IE jQuery

<div id="media-photo"> 
    <img src="/uploads/photos/16.jpg" alt="" /> 
</div> 
<a href="/uploads/photos/5.jpg" class="img"> 
    <img src="/uploads/photos-thumbs/5.jpg" alt="" /> 
</a> 
<a href="/uploads/photos/6.jpg" class="img"> 
    <img src="/uploads/photos-thumbs/6.jpg" alt="" /> 
</a> 

JQUERY:

$(document).ready(function() { 
    $('a.img').click(function() { 
     var path = $(this).attr('href'); 

     $('#media-photo img').attr('src', path); 

     return false; 
    }); 
}); 

Explication:

Ce que le code ci-dessus est censé faire est lorsque vous cliquez sur un point d'ancrage (avec classe img), l'image dans le # media-photo div est remplacée par une nouvelle basée sur l'attribut href de l'ancre (le href est un chemin relatif à une image, il remplace le src actuel de img à hommage).

Cela fonctionne très bien dans Firefox.

Dans IE (en particulier la version 8, je n'ai pas encore testé les anciennes versions), que se passe-t-il lorsque vous cliquez sur l'ancre, l'image s'ouvre dans le navigateur.

Comment faire pour que cela fonctionne également dans IE?

EDIT:

J'ai résolu le problème en utilisant try {} {} enfin pour vous assurer que la fonction retourne false (pour éviter le comportement par défaut). Voici l'intégralité du code jQuery (je l'ai simplifié largement au-dessus de ne pas confondre les gens avec des choses non pertinentes):

$(document).ready(function() { 
    $('.box-content2 a.img').click(function() { 
     var path = $(this).attr('href'); 
     var title = $('img', this).attr('alt'); 
     var description = jQuery.trim($(this).attr('title')); 
     var id = $(this).attr('id'); 

     if (id != $('#media-photo img').attr('id')) { 

      try { 

       $('#media-photo img').attr('src', path); 
       $('#media-photo img').attr('alt', title); 
       $('#media-photo img').attr('id', id); 

       $('#content h2:first').text('You Are Viewing "' + title + '"'); 
       $('title').text('You Are Viewing "' + title + '"'); 

       if (description.length > 0) { 
        $('#content .box-container:first').removeClass('invisible'); 
        $('#content .box-container:first p').text(description); 
       } else { 
        $('#content .box-container:first').addClass('invisible'); 
       } 

       var action = '/view/favoriting-form/id/' + id; 

       $.get(action, function(data) { 
        if ($('.favoriting').length > 0) { 
        $('.favoriting').replaceWith(data); 
        } else { 
         $('#actions h3').after(data); 
        } 
       }); 

       action = '/view/rating-form/id/' + id; 

       $.get(action, function(data) { 
        if ($('.rating').length > 0) { 
         $('.rating').replaceWith(data); 
        } else { 
         if ($('.favoriting').length > 0) { 
          $('.favoriting').after(data); 
         } else { 
          $('#actions h3').after(data); 
         } 
        } 
        $('.star').rating(); 
       }); 

       action = '/view/add-media-comment/id/' + id; 

       $.get(action, function(data) { 
        $.getScript('/js/photo.js'); 
        $('#media-comments').html(data); 
       }); 

      } finally { 

       return false; 
      } 

     } 

     return false; 
    }); 
    $('#add_to_favorites').hover(function() { 
     var id = $('#media-photo img').attr('id'); 
     var action = '/view/photo/id/' + id; 
     $('.favoriting').attr('action', action); 
    }); 
    $('#rate-button').hover(function() { 
     var id = $('#media-photo img').attr('id'); 
     var action = '/view/photo/id/' + id; 
     $('.rating').attr('action', action); 
    }); 
    $('a.previous-media, a.next-media').click(function() { 
     var id = $('#media-photo img').attr('id'); 
     var href = $(this).attr('href'); 
     href = href.split('/'); 
     var p = href[href.length - 1]; 
     var url = '/view/album-photos/id/' + id + '/p/' + p; 

     $.get(url, function(data) { 
      $.getScript('/js/photo.js'); 
      $('.box-content2').html(data); 
     }); 

     return false; 
    }); 
    $('#media-comments form').submit(function() { 
     var id = $('#media-photo img').attr('id'); 
     var url = '/view/add-media-comment/id/' + id; 

     var postData = $(this).serialize() + '&add_comment=Submit'; 
     $.post(url, postData, function(data) { 
      $.getScript('/js/photo.js'); 
      $('#media-comments').html(data); 
     }); 

     return false; 
    }); 
}); 
+0

Votre exemple simplifié fonctionne pour moi dans IE7. Avez-vous essayé d'exécuter ce code réel ci-dessus dans IE8, ou simplement votre version plus compliquée? – ScottE

+0

Votre code fonctionne pour moi dans IE8 avec et sans mode de compatibilité. Cependant, il ne fonctionne pas pour moi dans Firefox, qui navigue vers l'image plutôt que de le charger dans la balise img. –

+0

J'ai déjà résolu le problème les gars (en utilisant try {} finally {} bloquer donc même au cas où quelque chose ne va pas dans le js il renvoie encore false). –

Répondre

1

Dans cette ligne:

if (id != $('#media-photo img').attr('id')) { 

id vient?

+0

J'ai supprimé cette ligne. Il vient en fait de l'ancre (chaque ancre a un attribut id, le balisage est plus compliqué donc je l'ai simplifié autant que possible) comme ceci var id = $ (this) .attr ('id'); –

+0

Juste pour clarifier ce n'est pas le problème certainement, j'ai vérifié l'id avec l'alerte et il a une valeur correcte, j'ai également essayé d'enlever la condition if et le problème persiste. –

+0

J'ai résolu le problème en utilisant try {} finally {}, vérifiez le message d'origine, je l'ai mis à jour. –

1

Hmm, essayez rapidement et me dire si cela fonctionne:

$(document).ready(function() { 
    $('a.img').click(function(ev) { 
     var path = $(this).attr('href'); 

     $('#media-photo img').attr('src', path); 
     ev.preventDefault(); 
     return false; 
    }); 
}); 
+0

Non, cela ne fonctionne pas. –

+0

Il y a quelque chose d'autre qui se passe, je viens de déposer votre code dans une page de test et ça fonctionne très bien dans IE8.Pouvez-vous nous donner plus d'informations? – Steerpike

+0

J'ai résolu le problème en utilisant try {} finally {}, vérifiez le message d'origine, je l'ai mis à jour. –