ShareThis - 在AJAX内容无效后加载按钮

时间:2014-08-15 04:47:59

标签: javascript jquery ajax social-networking expressionengine

该网站是使用ExpressionEngine(2.8.1)构建的,但由于要共享的内容是通过AJAX加载的,我决定在ShareThis网站上使用生成的“网站”代码而不是可能过时的EE附加组件

所以ShareThis生成了以下标记,我将其置于通过AJAX加载的EE模板中:

<span class="st_facebook_large" displayText="Facebook"></span>
<span class="st_twitter_large" displayText="Tweet"></span>
<span class="st_pinterest_large" displayText="Pinterest"></span>
<span class="st_googleplus_large" displayText="Google +"></span>
<span class="st_email_large" displayText="Email"></span>

在标题中,我按照提供的方式加载脚本:

<script type="text/javascript">var switchTo5x=true;</script>
<script type="text/javascript" src="http://w.sharethis.com/button/buttons.js"></script>
<script type="text/javascript">stLight.options({publisher: "MY_PUBLISHER_ID", doNotHash: false, doNotCopy: false, hashAddressBar: false});</script>

然后在JS中,我将以下脚本绑定到加载内容的click事件:

$('#ajax-content').load('ajax/'+id, function() {
    if(window.stButtons) {
        stButtons.locateElements();
    }
}

但是,当按钮生成正确时,它们似乎没有绑定到它们的任何事件处理程序;点击它们什么都不做。我试过没试过if(window.stButtons),但没有区别。

如果我使用以下代码代替stButtons.locateElements();,则按钮甚至不显示:

$.getScript('http://w.sharethis.com/button/buttons.js', function(data, textStatus, jqxhr) {
    var switchTo5x = true;
    stLight.options({publisher: "MY_PUBLISHER_ID", doNotHash: false, doNotCopy: false, hashAddressBar: false});
});

任何想法出了什么问题以及我能做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

单击“事件”仅适用于DOM加载的内容。如果在加载DOM后添加内容,则这些元素将不会包含Click事件。

要解决此问题,您需要使用jQuery Delegate Function。这也适用于&#34; Future Elements&#34;,这意味着之后使用例如Ajax加载的元素。