2010-06-18 14 views
2

Voici mon HTML:Fancybox iframe dit que mon href YouTube est undefined

<a class="video iframe" href="http://www.youtube.com/watch?v=Psk2Pq03rv0&#38;fs=1">Arbitrary text</a> 

Voici le javascript Fancybox:

<script type='text/javascript'> 
    $(document).ready(function(){ 
    $("a.video").fancybox({ 
     'href' : this.href.replace(new RegExp("watch\\?v=", "i"), 'v/'), 
     'type' : 'swf', 
     'swf'  : { 
     'wmode' : 'transparent', 
     'allowfullscreen': 'true' 
     } 
    }); 
    return false; 
    }); 
</script> 

Firebug Console dit:

this.href is undefined 
'href' : this.href.replace(new RegExp("watch\\?v=", "i"), 'v/'), 

En Résultat, en cliquant sur ce lien, l'utilisateur se déplace sur YouTube et ne déclenche pas Fancybox. Changer la ligne problématique à 'href' : this.href.replace(new RegExp("watch?v=", "i"), 'v/'), qui me semble plus correct, donne le même résultat.

Un conseil?

EDIT: J'ai ajusté mon script pour inclure uniquement les parties pertinentes à ma question.

Répondre

2

tag script devrait ressembler à ceci

<script type='text/javascript'> 
$(document).ready(function(){ 
    $("a.video").click(function() { 
     $.fancybox({ 
       'padding' : 0, 
       'autoScale' : false, 
       'title' : this.title, 
       'overlayOpacity' : '.6', 
       'overlayColor' : '#333', 
       'transitionIn' : 'none', 
       'transitionOut' : 'none', 
       'centerOnScroll' : false, 
       'showCloseButton' : true, 
       'hideOnOverlayClick': false, 
       'href' : this.href.replace(new RegExp("watch\\?v=", "i"), 'v/'), 
       'type' : 'swf', 
       'swf' : { 
       'wmode': 'transparent', 
       'allowfullscreen': 'true' 
       } 
     }); 
     return false; 
    }); 
}); 
</script> 

url devrait ressembler à ceci - ajouter & fs = 1 à la fin de celui-ci

<a class="video iframe" href="http://www.youtube.com/watch?v=Psk2Pq03rv0&fs=1">Arbitrary text</a> 
+0

Eh bien, je souhaite que je savais comment faire mon code et assez structuré comme le vôtre, mais oh bien. Je m'excuse de ne pas avoir inclus le '$ (document) .ready' plus tôt - je pensais que beaucoup serait supposé. Le '& fs = 1' n'a rien fait pour moi, mais le' return false; ', que j'ai négligé de remplacer après avoir déplacé ce code d'un autre fichier, a aidé un peu. Fancybox est déclenchée maintenant, mais la boîte est blanche et vide; la vidéo ne se charge jamais. Un autre coup de couteau? J'ai mis à jour mon code de manière appropriée. – danfo

+0

$ ("a.video"). Click (function() { $ .fancybox ({ votre code manque toujours de cette partie, et c'est important, c'est ce qui fait fonctionner 'this' dans les options de fancybox –

+0

Merci wowo, mais le lien va toujours à YouTube sans déclencher Fancybox Voici à quoi ressemble mon code en ce moment, en excluant toutes les propriétés de style inutiles: ' $ (document) .ready (function() { \t $ (" a.video "). click (function() {$ .fancybox ({ \t \t 'href' \t: this.href.replace (nouveau RegExp (" regarder \\?v = », "i"), 'v /'), \t \t 'type' \t \t: 'swf', \t \t 'swf' \t \t: { \t \t \t 'wmode': 'transparent', \t \t \t 'allowfullscreen': 'true' \t \t} \t}); \t}); \t return false;} ), ' – danfo

1

this.href, dans ce contexte, fait référence à un document, pas l'ancre.

$("a.video").fancybox({ 
    'padding' : 0, 
    'autoScale' : false, 
    'title' : this.title, 
    'overlayOpacity' : '.6', 
    'overlayColor' : '#333', 
    'transitionIn' : 'none', 
    'transitionOut' : 'none', 
    'centerOnScroll' : false, 
    'showCloseButton' : true, 
    'hideOnOverlayClick': false, 
    'href' : this.href.replace(new RegExp("watch\\?v=", "i"), 'v/'), 
    'type' : 'swf', 
    'swf' : { 
     'wmode': 'transparent', 
     'allowfullscreen': 'true' 
    } 
}); 

est également écrit que:

var options = { 
    'padding' : 0, 
    'autoScale' : false, 
    'title' : this.title, 
    'overlayOpacity' : '.6', 
    'overlayColor' : '#333', 
    'transitionIn' : 'none', 
    'transitionOut' : 'none', 
    'centerOnScroll' : false, 
    'showCloseButton' : true, 
    'hideOnOverlayClick': false, 
    'href' : this.href.replace(new RegExp("watch\\?v=", "i"), 'v/'), 
    'type' : 'swf', 
    'swf' : { 
     'wmode': 'transparent', 
     'allowfullscreen': 'true' 
    } 
}; 
$("a.video").fancybox(options); 

l'ancre n'est pas disponible dans ce contexte.

Une option consiste à envelopper le code dans un chaque bloc

$("a.video").each(function(function(index, value)) { 
    var obj = $(value); 
    obj.fancybox({ 
     'padding' : 0, 
     'autoScale' : false, 
     'title' : this.title, 
     'overlayOpacity' : '.6', 
     'overlayColor' : '#333', 
     'transitionIn' : 'none', 
     'transitionOut' : 'none', 
     'centerOnScroll' : false, 
     'showCloseButton' : true, 
     'hideOnOverlayClick': false, 
     'href' : value.href.replace(new RegExp("watch\\?v=", "i"), 'v/'), 
     'type' : 'swf', 
     'swf' : { 
      'wmode': 'transparent', 
      'allowfullscreen': 'true' 
     } 
    }); 
}); 
+0

Cela a du sens, mais il y a une erreur de syntaxe dans votre première ligne, pouvez-vous le repérer? "Paramètre formel manquant" est le message d'erreur - je ne suis pas trop familier avec la syntaxe Javascript, c'est triste à dire. – danfo

+0

ah, l'index ou la valeur peut être un mot réservé, vous pouvez les changer en quelque chose d'autre. –