0

不知何故,我怀疑这很简单,但我只是以错误的方式看待它。

我将href的页面名称部分动态加载到FB之类的框HTML5代码中。这是通过单击按钮 ('fbtn) 触发的 - 每个按钮都附加了不同的页面名称(按钮和页面名称也是动态创建的)。这可以正常工作:a)页面名称正在传递给函数;b) 第一次,FB 代码正确触发并生成显示。当我关闭显示 Like Box 的 div 并单击第二个按钮(或再次单击相同的按钮)时,正在传递变量(页面名称),但似乎没有触发 FB 代码 - 所以,div 显示,但里面什么都没有。

FB 代码包含在此函数中,以防止它在页面加载时自动运行(当尚未创建按钮和页面名称时)。

有没有办法重新设置整个函数,以便在单击“关闭”时(如下所示),变量函数回到第一次单击之前的状态(即等待传递变量页面名称并运行FB代码)?

感谢您的任何建议。

$('#classOne').on('click','.fbtn', function() {
   fbid = this.value;
      if (!fbid) {
        fbid = 'Boo'};
        alert('' + fbid + '');
  (function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=XXXXXXXXXXXXXXX";
  fjs.parentNode.insertBefore(js, fjs);
  }(document, 'script', 'facebook-jssdk'));
   $('#fbLike').html('<div id =closeFB>Close</div><div id=fb-root></div><fb:like-box     href=https://www.facebook.com/' + fbid + ' width=900 height=500 show_faces=true stream=true show_border=true header=true></fb:like-box>');
   $('#closeFB').stop().animate({height:'20'},50);
   $('#fbLike').stop().animate({height:'500'},500);
   $('#closeFB').click(function() {
   $('#fbLike').html('').stop().animate({height:'0'},500);
   $('#closeFB').stop().animate({height:'0'},50);
});
});
4

2 回答 2

0

好吧,至少一种解决方案是使用 FB iframe 代码。动态更改 iframe src 中的 href 可以正常工作,并且 Like Box 每次都会根据单击的按钮使用不同的 src 重新加载。虽然这解决了问题,但如果有人有一个 javascript 解决方案,我仍然会对它感兴趣,如果只是为了教育目的。谢谢!

于 2013-07-07T13:33:31.783 回答
0

问题是,如果您的代码在文档中找到具有 id 的脚本,则它不会执行任何操作,facebook-jssdk因此从技术上讲,它只能工作一次,要么为每个脚本提供不同的 id,要么在添加新脚本之前删除现有脚本,做这个替换

if (d.getElementById(id)) return;

var currentScript = d.getElementById(id);
if (currentScript){
    currentScript.parentNode.removeChild(currentScript);
}
于 2013-07-07T07:24:09.547 回答