Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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 EventListener在无限滚动期间再次初始化后多次单击函数激发_Javascript_Jquery_Wordpress_Infinite Scroll - Fatal编程技术网

Javascript EventListener在无限滚动期间再次初始化后多次单击函数激发

Javascript EventListener在无限滚动期间再次初始化后多次单击函数激发,javascript,jquery,wordpress,infinite-scroll,Javascript,Jquery,Wordpress,Infinite Scroll,这是我的第一个问题,所以我试图尽可能精确地描述它,并遵循stackoverflow准则“我如何提出一个好问题?” 我的问题是: 我使用“老而金”的jQuery插件在wordpress网站上加载下一篇文章。我还使用这个插件来加载youtube视频“懒惰”,只需点击视频的播放按钮。为了确保在使用infinte滚动功能加载一组新帖子后lazyframe的功能,我用以下方式初始化lazyframe,添加lazyframe('.lazyframe')初始化代码到无限滚动js的函数(新元素)部分:

这是我的第一个问题,所以我试图尽可能精确地描述它,并遵循stackoverflow准则“我如何提出一个好问题?”

我的问题是:

我使用“老而金”的jQuery插件在wordpress网站上加载下一篇文章。我还使用这个插件来加载youtube视频“懒惰”,只需点击视频的播放按钮。为了确保在使用infinte滚动功能加载一组新帖子后lazyframe的功能,我用以下方式初始化lazyframe,添加
lazyframe('.lazyframe')初始化代码到无限滚动js的
函数(新元素)
部分:

    //infinite scroll
    if ($masonry.length && obj_testsite.infinitescroll != 'disable') {
    nextSelector = obj_testsite.nextselector;
    if (document.URL.indexOf('/source/') != -1) {
        nextSelector = '#navigation #navigation-next a';
    }

    $masonry.infinitescroll({
        navSelector : '#navigation',
        nextSelector : nextSelector,
        itemSelector : '.thumb',
        prefill: true,
        bufferPx : 500,
        loading: {
            msgText: '', // load spinner icon instead of gif images - see below
            finishedMsg: obj_testsite.__allitemsloaded,
            img: '',
            finished: function() {}
        }
    }, function(newElements) {

            lazyframe('.lazyframe');

            var $newElems = $(newElements);
            $('#infscr-loading').fadeOut('normal');
            $masonry.masonry('appended', $newElems, true);                                  
    });
}
到目前为止,这一切都很好。但是,当我向下滚动并加载几组带有无限滚动的帖子,然后单击播放按钮时,lazyframe插件有时会创建多个youtube iFrame

到目前为止,我的研究表明,事件多次触发的原因是,因为事件多次附加到元素。以下代码显示lazyframe插件使用addEventListener函数以文档中的元素为目标的部分:

            function n(e) {
            if (e instanceof HTMLElement != !1) {
                var t = {
                    el: e,
                    settings: i(e)
                };
                t.el.addEventListener("click", function() {
                    return t.el.appendChild(t.iframe)
                }), d.videolazyload ? l(t) : s(t, !!t.settings.thumbnail)
            }
        }

你知道怎么解决这个问题吗?我试图阻止事件传播,但由于缺乏知识,无法修复它。任何帮助都将不胜感激。

您在eventListener中使用事件捕获。实际上,并非所有浏览器都支持事件捕获(例如,小于9的Internet Explorer版本不支持),但所有浏览器都支持事件冒泡,这就是为什么它是用于将处理程序绑定到所有跨浏览器抽象(包括jQuery)中的事件的阶段

最接近您在jQuery中查找的内容是使用on()。 因此,您可以将代码更改为此(事件):


off()函数在指定的元素上删除事件监听器(在我们的例子中是“单击”),以便您可以尝试此解决方案。

插件作者在此。谢谢你使用它


插件中有一个bug,在重新初始化时会在元素上附加多个事件侦听器。这在v1.1.1中进行了排序,所以只需更新插件,它就可以工作。

为什么不通过jquery设置“单击”事件?不要工作Nedim,页面的一半已经消失了。请看一看完整的代码等等,这个点击监听器是在插件中,而不是在你的代码中?不,我指的是github代码,不是wp插件。我把代码手动放在我的自定义js文件中。你能在fiddle上粘贴一些代码,让我能真正弄清楚到底发生了什么吗?
$(t.el).off('click').on('click', function() {
                    return t.el.appendChild(t.iframe)
                });