すでに開いている fancybox に新しいコンテンツをロードするには、次のようにします。このようにすると、fancybox ウィンドウが新しいコンテンツで更新される間、fancybox が閉じなくなります。
// is fancybox already popped up?
fancyboxIsOpen: false,
openFancyBox: function (urlToBeLoaded) {
if (urlToBeLoaded === null) {
this.closeFancyBox();
} else {
if (this.fancyboxIsOpen) {
this.openInAlreadyOpenedFancyBox(urlToBeLoaded);
} else {
this.openFirstFancyBox(urlToBeLoaded);
}
}
},
openFirstFancyBox: function (urlToBeLoaded) {
var that = this;
$.fancybox.open({
type: 'ajax',
href: urlToBeLoaded,
afterClose: function() {
this.openFancyBox(null);
return true;
},
afterShow : function() {
that.fancyboxIsOpen = true;
var ahref = jQuery(".fancybox");
ahref.on("click", function(event){
//stop the click action, we do not want to load the href in the window
event.preventDefault();
var currentTarget = $(event.currentTarget);
var urlToBeLoaded = that.getFancyBoxId(currentTarget);
});
}
});
}, // end openFirstFancyBox
openInAlreadyOpenedFancyBox: function (urlToBeLoaded) {
var that = this;
$.fancybox.showLoading(); // show loading icon
$.ajax({
type: "GET",
url: urlToBeLoaded,
success : function(content, textStatus, jqXHR) {
$.fancybox.hideLoading();
jQuery(".fancybox-inner").html(content);
$.fancybox.update();
},
error : function(xhr, status) {
$.fancybox.hideLoading();
return false;
}
});
},
closeFancyBox: function () {
this.fancyboxIsOpen = false;
$.fancybox.close();
},
getFancyBoxId: function (currentTarget) {
var id = currentTarget.attr("href");
return id;
},
重要なことはjQuery(".fancybox-inner").html(content);
、現在の fancybox のコンテンツを新しいコンテンツに置き換え、オプションで$.fancybox.update();
新しいコンテンツに従ってウィンドウのサイズを変更することです。