我有一个打开弹出窗口的链接,在弹出窗口中,我从div加载内容。
内容是一些sharethis.com按钮,以及由sharethis呈现的要添加到页面的javascript。

因此,设置如下所示:

按钮和内容:

<a href="#share" class="btn btn-white opaque30 btn-large marginR10" id="shareHead"><i class="fa fa-share"></i> Share</a>

<div id="share_this_btns" class="hidden">
    <script type="text/javascript" src="http://w.sharethis.com/button/buttons.js"></script>
    <script type="text/javascript">stLight.options({publisher: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", doNotHash: false, doNotCopy: false, hashAddressBar: false});</script>
    <div class="margin-10"><span class='st_facebook_hcount margin-10' displayText='Facebook'></span></div>
    <div class="margin-10"><span class='st_twitter_hcount margin-10' displayText='Tweet'></span></div>
    <span class='st_pinterest_hcount' displayText='Pinterest'></span>
</div>

弹出窗口初始化
$('#shareHead').popover({
    title   : "Share",
    html    : true,
    content : function(){
        return $('#share_this_btns').html();
    },
    placement : 'bottom'
});

这些按钮可以很好地显示并显示计数-但是,不能单击它们。

我还尝试过将脚本标签放置在content div之外,然后将其完全删除(因为存在sharethis脚本的第二个实例,但是具有不同的发布者ID)。

你能给些建议么?

编辑//
它似乎不时地起作用,而无需我进行任何更改。因此脚本似乎可以运行,也许这是元素如何分层的问题?

最佳答案

好吧,我知道了。我不能只是将sharethis数据加载到弹出窗口中,所以我要做的是:
我添加了sharethis提供的普通标签,并通过调用stButtons.locateElements()重新初始化了按钮;

为此,我做了一个自定义的回调(由https://stackoverflow.com/a/14727204/1206437提供),我将其称为init。
但是,此后,弹出框未正确定位,因为加载后宽度会发生变化。所以我也写了一个函数来调整所有内容。它必须位于setTimeout中,因为locateElements()似乎没有回调,因此在加载了tweet和共享数量之后,宽度再次更改。

两个sharethis脚本已经加载到头文件中。

最终的主体代码如下所示:

打开弹出按钮

<div id="btnParent_head">
    <button class="btn btn-white opaque30 btn-large marginR10" id="shareHead"><i class="fa fa-share"></i> Share</button>
    <a href="#pledge" class="btn btn-main scroll"><i class="fa fa-thumbs-o-up"></i> Pledge</a>
    <button href="#contact" id="contactHead" data-fancybox-href="#contactBox" class="btn btn-white opaque30 btn-large marginL10"><i class="fa fa-envelope"></i> Contact</button>
</div>

Javascript / JQuery
$(document).load(function(){
    $('#shareHead').popover({
            title   : "Share",
        html    : true,
        content : function(){
            var text = '';
            text += '<div class="margin-10"><span class="st_facebook_hcount margin-10" displayText="Facebook"></span></div>';
                text += "<div class='margin-10'><span class='st_twitter_hcount margin-10' displayText='Tweet'></span></div>";
            text += "<span class='st_pinterest_hcount' displayText='Pinterest'></span>";
             return text;
            },
            placement : 'bottom',
        callback : function(){
                 reloadStBtns(resizePopover,$('#btnParent_head     .popover'),$('#shareHead'));
        }
    });
});

var tmp = $.fn.popover.Constructor.prototype.show;
$.fn.popover.Constructor.prototype.show = function () {
      tmp.call(this);
      if (this.options.callback) {
        this.options.callback();
      }
}

function reloadStBtns(callback,popover,parent) {
    stButtons.locateElements();
    setTimeout(function(){
        callback(popover,parent);
    },500);
}
function resizePopover(popover, parent) {
    var i_width = parent.outerWidth();
    var i_swidth = popover.outerWidth();
    var i_nleft = (i_width - i_swidth)/2
    popover.css({'left':i_nleft});
}

我希望有一个比setTimeout更好的解决方案,但是我什么也找不到。

10-06 07:58