codeNameLily
codeNameLily

Reputation: 333

Fancybox is taking 2 clicks to open dynamically loaded content

Using JQuery, I am loading a div from an external HTML page into fancybox and am building the link using variables. It is taking two clicks to open it. The first, I believe, is only initiating it. But I don't know how to fix it. Is there a better way to be doing this?

The HTML is here:

<a class="BannerVideoAwesome fancybox" id="series900" border="0"   href="/mkting/Videos/Speakers.html"><img src="/images/titles/CM/series-speakers-video.jpg" border="0"  align="left" /></a>

The jQuery is here:

$('a.BannerVideoAwesome').live('click', function(e){
    e.preventDefault();
    var url = $(this).attr('href');
    var grabVid = '#' + $(this).attr('id');
    vidObject = url + grabVid;
    var vidContents = vidObject.html();
    alert(vidContents);
    $.fancybox({
            //'href': url,
            'content':'vidContents'
                     });

Thank you so much in advance for any help someone can give me. I have been struggling with this for days.

Upvotes: 0

Views: 2077

Answers (3)

Chris Aelbrecht
Chris Aelbrecht

Reputation: 2091

$('a.BannerVideoAwesome').live('click', function (event) {
    $.fancybox(this,{
        'autoDimensions': true,
        'autoScale': true,
        'transitionIn': 'none',
        'transitionOut': 'none',
        'type': 'ajax',
        'padding': 0
    });
    event.preventDefault();
});

Upvotes: 0

JFK
JFK

Reputation: 41143

I think the title of your post is a little bit misleading. Anyway, if I understood right, you just want to load a partial content (DIV) from an external html file into fancybox. In your example, the file episodeSpeakers.html contains a DIV with ID='series900'

<div id="series900">selected content</div>

If the above is correct, then you don't need to use jQuery live(), but binding fancybox to a click() and use ajax and dataFilter to select the content.

With the same html, this script should do the trick:

$("a.BannerVideoAwesome").click(function() {
var grabVid = "#"+$(this).attr('id');
$.fancybox(this,{
 'type': 'ajax',
 'ajax': {
   dataFilter: function(data) {
   var vidContents = $(data); 
   vidContents = $(grabVid, vidContents); 
   return(vidContents); 
  } // datafilter
 } // ajax
}); // fancybox
return false;
}); //click

or you may use

$("a.BannerVideoAwesome").click(function(event) {
event.preventDefault();
.
.

instead of

return false;

IMPORTANT : Due to some cross-browser issues, don't use the dataFilter solution above. It would be better to use the fancybox's inline method, adding the partial content (from the external html file) into a hidden DIV within your calling html document and then move it from there into fancybox. It requires (of course) to add such DIV. e.g.:

<div style="display: none;">
 <div id="fancyContent"></div>
</div>

Then use this script:

$("a.BannerVideoAwesome").click(function() {
var grabVid = "#"+$(this).attr('id');
$.ajax({
 type: "GET", // default
 dataType: "html",      
 cache: false,                      
 url: this.href,
 success: function (data) {
  $("#fancyContent").html(grabVid ? $("<div>").append(data).find(grabVid) : data);
  $.fancybox({
   'href': "#fancyContent",
   'onCleanup': function() {
     var fancyContent = this.href;
     $(fancyContent).unwrap().empty();
   } // onCleanup 
  }); // fancybox
 } // success
}); //ajax
return false;
}); //click

that works on most browsers. BTW, the onCleanup option fixes this bug

Upvotes: 0

Vlad Stratulat
Vlad Stratulat

Reputation: 1296

Try to change from click event into mouseover.

$('a.BannerVideoAwesome').live('mouseover', function(e){
...

Upvotes: 3

Related Questions