ShareThis - AJAX 内容不工作后加载的按钮
Posted
技术标签:
【中文标题】ShareThis - AJAX 内容不工作后加载的按钮【英文标题】:ShareThis - Buttons loaded after AJAX content not working 【发布时间】:2014-08-15 04:47:58 【问题描述】:该站点是使用 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 中,我将以下脚本绑定到加载内容的单击事件:
$('#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】:点击事件仅适用于 DOM 加载的内容。如果在加载 DOM 后添加内容,则这些元素上不会有 Click-event。
要解决此问题,您需要使用jQuery Delegate Function。这也适用于“未来元素”,即之后使用例如 Ajax 加载的元素。
【讨论】:
我想了很多,但是如果我不知道 ShareThis 在点击事件上调用的函数,我该如何使用 Delegate?此外,我认为在加载内容后重新初始化按钮会在新内容上建立处理程序。 抱歉,没关系,我意识到脚本运行良好,但我的 CSS 确实阻止了按钮上的点击事件。以上是关于ShareThis - AJAX 内容不工作后加载的按钮的主要内容,如果未能解决你的问题,请参考以下文章
jQuery:获取 .timeago() 以处理 DOM 就绪后加载的元素(Ajax)
php - Laravel:如何在从下拉列表中选择更改后加载 Ajax 数据?
在 adminlte-3 bootstrap-4 treeview 打开/隐藏页面加载后加载动态 AJAX 侧边栏菜单 jquery 不起作用