2016-08-18 27 views
0

我已经找到了自己的答案,但是因为我发布,我没有太多的运气。 Fancybox发现在:http://fancyapps.com/fancybox/Fancybox2加载后更新标题

我正在为我自己做一个照片库,这是非常好的。但是,我想要将图像描述放入标题框中。我的图片描述存储在别处。 (我实际上是从Flickr中提取描述,但这在很大程度上是无关紧要的。) 正确,因此,每个图像都包含一个名为“id”的html5数据,该数据链接到flickr图像ID。 之前我开的fancybox,我这样做:

var sDescription; 

$(".fancybox").fancybox({ 
        beforeLoad: function() { 
         var id = this.element.data('id'); 
         var data = { 
          imgID: id 
         }; 
         //setupBlocks(); 
         loadData(data); 
        } 

function loadData(data) { 
        $.ajax({ 
         type: "POST", 
         url: "Ajax/getDescription.php" 
         , 
         data: data 
         , success: function (res) { 

          sDescription = res; 
         } 
        }); 
       } 

这一切正在做的是通过ID,以我自己的脚本,一个页面,只持有文本字符串,然后把它变成一个字符串。

afterLoad: function() { 

         this.title= this.element.data('title')+sDescription; 
        } 

现在我只是更新标题以保存标题以及描述。当我打开第一张图片时,它会发出ajax请求,并且在下载文本后,fancybox会打开并显示标题:Megan 0014“The Wanderer” 当我按左/右键时,我可以看到beforeLoad回调正在呼叫ajax请求,但文本没有更新(仍然说在一个完全不同的模型上的流浪汉 - 名称前缀确实已更正),除非我关闭/打开fancybox,那么字符串是正确的。 我已经尝试过的其他东西:在变量中引用“this”并将其传递给loadData,并在ajax加载后设置文本,但标题似乎一旦fancybox被打开就不会更新,不像正常div中的HTML。

作为最后的手段,我可​​能会预加载每个字符串并将其设置在一个数组中,但我宁愿做的只是更新成功的字符串。

我尽力保持这个尽可能通用......但让我知道是否有任何问题。

编辑:如果我按两次箭头键(并提供给我第二次加载),文本更新到上一图像的描述,这只是fancybox不刷新字符串的问题。

Edit2:是的,我编辑了很多。我知道。我发现了onUpdate回调,所以在我的ajax成功中,我调用了$ .fancybox.update();

我的onUpdate看起来是这样的:

onUpdate : function() { 
         console.log("on update"); 
         this.title = this.element.data('title') + sDescription; 
         console.log(this.title); 

        } 

在控制台的标题是正确─网页上的标题是不是。这告诉我,不,标题不能改变,没有关闭窗口...

回答

0

哇,我觉得愚蠢的没有想到这一点,但我忘了我可以直接修改div。

$(".fancybox-title").html(this.element.data('title') +" "+ sDescription)