2009-08-14 7 views
0

Le code suivant fonctionne très bien en chrome FF etc, mais pas IE, quelqu'un sait pourquoi?Quelqu'un me dit pourquoi ce Jquery ne fonctionne pas dans IE?

Fondamentalement, tout fonctionne accepter le remplacement de l'image attribut

$("#container #main_image img#largeId").attr({ src: largePath }); 

Même le reste de la fonction-à-dire les classes de permutation fonctionne, tout simplement pas le remplacement de l'image. L'exemple complet peut être vu ici example cliquez sur une image et essayez d'échanger entre les vignettes sur la droite dans la fenêtre modale.

L'effet que je vais faire est similaire à celui de ce site Web webdesignerwall, le jQuery est presque exactement le même - bien que cela fonctionne avec IE !!!!

jQuery(document).ready(function($) { 

    $("a.group").fancybox({ 
    'frameWidth':966, 
    'frameHeight': 547, 
    'hideOnContentClick': false, 
    'overlayOpacity': 0.85, 
    'callbackOnShow': function() { 
     $("#container ul#thumbnails li a").click(function(){ 
     var largePath = $(this).attr("title"); 
     $("#container #main_image img#largeId").fadeOut().hide(); 
     $("#container #main_image img#largeId").attr({ src: largePath }); 
     $("#container #main_image img#largeId").fadeIn("slow"); 
     $('.active').removeClass('active'); 
     $(this).addClass("active");return false; 
     }); 
    } 
    }); 

}); 
+2

Que voulez-vous dire par "ne fonctionne pas"? Qu'est-ce que le code est censé faire, que se passe-t-il lorsque vous l'essayez, et en quoi cela diffère-t-il de ce que vous attendiez? Avez-vous vérifié les messages d'erreur? – Guffa

+5

cela pourrait ne pas être votre problème, mais pourquoi utiliser $ ("# container #main_image img # largeId") si vous sélectionnez par ID, ils devraient être uniques, donc $ ('# largeId') serait assez non? – Sander

+0

J'utilisais le chemin complet pour essayer de voir si c'était ce qui déroutait IE mais pas de chance – DanC

Répondre

0

Fondamentalement, cela a été résolu en changeant l'élément de destination d'un «ID» à une «classe».

Cela doit être fait parce que Fancybox duplique l'identifiant lors de l'appel de la fenêtre modale!

Un grand merci pour tout le monde aide ici!

1

Avez-vous utilisé Fiddler pour voir si l'image est demandée?

Cela fonctionne toujours pour moi: $ ("# foo"). Attr ("src", url);

Vous pouvez aussi simplement faire un remplacement à la place.

$ ('# foo'). Before ('< img src = "" .../>') .remove();

+0

ne pas avoir fiddler mais firebug et les barres d'outils de développement IE rapportent pas de bugs - le $ ("# foo"). Attr ("src", url); ne fonctionne pas unfortunatley – DanC

+2

Installez Fiddler c'est gratuit: http://www.fiddler2.com/fiddler2/ Firebug Lite ne va pas vous dire de la merde sur les appels http. – epascarello

1

Les chemins répertoriés dans l'attribut title de vos balises <a> sont incorrects (case à cocher). Plus précisément,

<a class="group" href="#hidden" title="images/2_large.jpg"> 

devrait être

<a class="group" href="#hidden" title="Images/2_large.jpg"> 

Firefox est un peu plus indulgent, mais IE est de rejeter ces manigances.

+0

Ce ne sont pas les liens qui appellent la fonction de remplacement de l'image, donc malheureusement changer cela ne fait aucune différence! – DanC

1

En plus de la réponse de BipedalShark, j'ai remarqué quelques petites choses qui sorta coincé dans mon esprit:

  1. Vous appelez jquery.min.js de Google dans la tête de votre page.
  2. Plus tard, vous appelez fancybox.js vers le bas de la page.
  3. Enfin, vous appelez un autre jquery.js après lui.

Donc, je sais (ainsi qu'une solution possible) est-il possible que ce soit partiellement responsable du problème? Ou est-ce que fancybox doit être chargé en bas de la page?

+1

Son jquery.js contient seulement le code pour la fonction $ (document) .ready (..). – Marc

+0

essayé de les déplacer, diverses combinaisons, pas de chance! – DanC

3

Ok, je l'ai compris. c'était douloureux et je conclus que le plugin est complètement faux :)

Le plugin duplique le contenu caché et l'insère dans la 'boîte'. Cela signifie que vous vous retrouvez avec des identifiants en double partout, ce qui bien sûr est invalide et des choses amusantes commencent à se produire. Lorsque vous faites votre sélecteur pour $ ('# largeId'), il fait référence à la photo originale cachée. Vous pouvez le voir si vous supprimez le style display: none de #hidden. La conclusion est d'utiliser une lightbox qui ajoute réellement le contenu plutôt que de le dupliquer. Je n'aime pas ce que l'auteur a fait entendre.

Vous pouvez modifier le code du plugin pour utiliser append au lieu d'utiliser (ligne 112 du plugin) comme celui-ci

var newHtml = $('<div id="fancy_div" />').append(target); 
_set_content(newHtml.html(), opts.frameWidth, opts.frameHeight); 

Vous devrez alors faire face à remettre le code html lorsque la visionneuse est fermée. Cependant je serais plus enclin à trouver une meilleure lightbox!

+0

J'ai essayé cela sans aucune chance! Arrrggghhhh !!!! – DanC

+1

Ok, je vais recréer ce localement et le trier .... donnez-moi une heure – redsquare

+0

génial! Faites-moi savoir si vous avez de la chance! À votre santé!!!! – DanC

Questions connexes