Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 外部JS文件';s函数在无限滚动后不加载_Javascript_Jquery_Tumblr_Infinite Scroll - Fatal编程技术网

Javascript 外部JS文件';s函数在无限滚动后不加载

Javascript 外部JS文件';s函数在无限滚动后不加载,javascript,jquery,tumblr,infinite-scroll,Javascript,Jquery,Tumblr,Infinite Scroll,我在tumblr上使用gumroad.js,并带有无限卷轴 <script type="text/javascript" src="https://gumroad.com/js/gumroad.js"></script> 这将在单击按钮时创建一个覆盖检出(模式)窗口。对于前15个帖子,它可以正常加载。但是,一旦剩余的按钮加载到无限滚动上,它们就不会加载js功能 脚本位于页面的 是否需要在无限滚动的每次回调中重新加载文件?:函数(newElements){ 编辑 我刚

我在tumblr上使用gumroad.js,并带有无限卷轴

<script type="text/javascript" src="https://gumroad.com/js/gumroad.js"></script>

这将在单击按钮时创建一个覆盖检出(模式)窗口。对于前15个帖子,它可以正常加载。但是,一旦剩余的按钮加载到无限滚动上,它们就不会加载js功能

脚本位于页面的

是否需要在无限滚动的每次回调中重新加载文件?:
函数(newElements){

编辑


我刚刚注意到soundcloud播放器在无限卷轴之后也消失了。这两个都是自定义类。它们在inspector中显示为类仍处于活动状态,但js文件未得到处理。

无限卷轴已知会导致脚本问题。是的,您可能需要重新初始化Gumroad在每次页面加载后的回调中。我对Gumroad了解不多,但出现了一个快速搜索

Gumroad.init()

作为重新初始化代码的方法

如果我错了,有人可以纠正我,但是把这一行放在回调中应该有用


编辑:

我们无法阻止Gumroad.js在每次运行
init()之后创建重复的按钮
,因此我们只需擦除所有按钮并让它们重新初始化。也无法取消连接单击处理程序,因此您需要克隆锚来删除它们。在每次无限滚动回调后,您需要运行此代码以将所有gumroad链接设置回正常状态,然后调用
gumroad.init()
重新初始化。我不确定您是否正在使用jQuery,但如果是,这是最简单的方法

作为模型使用:

jQuery

$('.gumroad-button').each(function() {
    $(this).replaceWith($(this).clone().children().remove().end()); 
});
Gumroad.init();
香草javascript

for (var i = 0, a = document.getElementsByTagName("a"); i < a.length; i++) {
  if (a[i].className.indexOf("gumroad-button") > -1) {
    var clone = a[i].cloneNode();
    clone.appendChild(document.createTextNode(a[i].lastChild.nodeValue));
    a[i].parentNode.replaceChild(clone, a[i]);
  }
}
Gumroad.init();
for(var i=0,a=document.getElementsByTagName(“a”);i-1){
var clone=a[i].cloneNode();
clone.appendChild(document.createTextNode(a[i].lastChild.nodeValue));
a[i].parentNode.replaceChild(克隆,a[i]);
}
}
Gumroad.init();

注释

选择要删除的子元素后,需要返回到克隆的元素
不删除文本节点,因此克隆后仅删除按钮的“图标”部分(最佳)

如果您使用的是香草javascript,则需要在克隆文本节点(“购买我的产品”)后复制它。但是,不要使用DOM方法(通过将
true
传递到
。cloneNode(true)
克隆锚定,然后删除不必要的子元素(即图标),而要进行深度克隆(同时克隆所有子元素)与jQuery方式一样,您可以仅浅克隆锚点,然后复制文本


同样,我们需要克隆并替换锚点链接元素以摆脱重复的点击处理程序,否则当您点击按钮时,它将实际执行Gumroad覆盖模式两次。

AFAIK,您需要在每次向DOM添加新帖子时调用javascript。因此,每次填充新内容时,都要加载整个js文件?如何在回调中做到这一点?这很奇怪。我查看了文档,找不到append/update方法,所以我想每次都必须调用JS文件。这对新加载的内容有效!-不幸的是,它在函数(newElements)中创建了现有(已加载)内容的副本{soundcloud html5播放器也有完全相同的问题。有什么建议吗?对不起,我对Gumroad服务不是很熟悉,但你能澄清你所说的重复内容是什么意思吗?你的意思是在每个页面加载后创建两个Gumroad按钮吗?是的,当一个新页面是loa时,它会在旧的按钮之上创建另一个按钮迪德。