JQuery取消绑定(滚动)功能不起作用

JQuery取消绑定(滚动)功能不起作用,jquery,Jquery,根据JQuery文档,这必须起作用,但事实并非如此 当弹出窗口显示时调用scrollHandler()函数,如果关闭则必须销毁,但是解除绑定似乎不起作用。如果我执行一个完整的$(window.unbind('scroll'),它确实可以工作,但它也会解除绑定附加到scroll事件的其他元素 代码是:整个滚动事件的惨败发生在第23行和第44行之间,只是为了节省几秒钟 演示(cookies实际工作的地方)位于: 如前所述,函数scrollHandler(){…}每次调用handleEyeCatche

根据JQuery文档,这必须起作用,但事实并非如此

当弹出窗口显示时调用scrollHandler()函数,如果关闭则必须销毁,但是解除绑定似乎不起作用。如果我执行一个完整的$(window.unbind('scroll'),它确实可以工作,但它也会解除绑定附加到scroll事件的其他元素

代码是:整个滚动事件的惨败发生在第23行和第44行之间,只是为了节省几秒钟

演示(cookies实际工作的地方)位于:


如前所述,
函数scrollHandler(){…}
每次调用
handleEyeCatcher()
时都会重新定义

因此,
.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例


尝试将
scrollHandler()
移动到
handleEyeCatcher()
外部,然后
unbind('scroll',scrollHandler)
将保证看到一个且唯一的
scrollHandler

,每次调用
handleEyeCatcher()
时都会重新定义
函数scrollHandler(){…}

因此,
.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例


尝试将
scrollHandler()
移动到
handleEyeCatcher()
外部,然后
unbind('scroll',scrollHandler)
将保证看到一个且唯一的
scrollHandler

,每次调用
handleEyeCatcher()
时都会重新定义
函数scrollHandler(){…}

因此,
.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例


尝试将
scrollHandler()
移动到
handleEyeCatcher()
外部,然后
unbind('scroll',scrollHandler)
将保证看到一个且唯一的
scrollHandler

,每次调用
handleEyeCatcher()
时都会重新定义
函数scrollHandler(){…}

因此,
.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例


尝试将
scrollHandler()
移动到
handleEyeCatcher()
外部,然后
unbind('scroll',scrollHandler)
将保证看到一个并且只有
scrollHandler
应该使用
.on()
.off()
,而不是
.bind()
.unbind()
.think:
函数scrollHandler(){…}
每次调用
handleEyeCatcher()
时都会重新定义。因此,
.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例。尝试将
scrollHandler()
移动到
handleEyeCatcher()
外部。非常感谢您的建议!我读过关于绑定/取消绑定和打开/关闭的文章,结果发现它们几乎是一样的,而且都是双向的。真正的技巧实际上是将scrollHandler()函数移到handleEyeCatcher()之外。如果你添加你的评论作为答案,我会接受。现在应该使用
.on()
.off()
,而不是
.bind()
.unbind()
。我想:
函数scrollHandler(){…}
每次调用
handleEyeCatcher()
时都会重新定义。因此,
.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例。尝试将
scrollHandler()
移动到
handleEyeCatcher()
外部。非常感谢您的建议!我读过关于绑定/取消绑定和打开/关闭的文章,结果发现它们几乎是一样的,而且都是双向的。真正的技巧实际上是将scrollHandler()函数移到handleEyeCatcher()之外。如果你添加你的评论作为答案,我会接受。现在应该使用
.on()
.off()
,而不是
.bind()
.unbind()
。我想:
函数scrollHandler(){…}
每次调用
handleEyeCatcher()
时都会重新定义。因此,
.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例。尝试将
scrollHandler()
移动到
handleEyeCatcher()
外部。非常感谢您的建议!我读过关于绑定/取消绑定和打开/关闭的文章,结果发现它们几乎是一样的,而且都是双向的。真正的技巧实际上是将scrollHandler()函数移到handleEyeCatcher()之外。如果你添加你的评论作为答案,我会接受。现在应该使用
.on()
.off()
,而不是
.bind()
.unbind()
。我想:
函数scrollHandler(){…}
每次调用
handleEyeCatcher()
时都会重新定义。因此,
.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例。尝试将
scrollHandler()
移动到
handleEyeCatcher()
外部。非常感谢您的建议!我读过关于绑定/取消绑定和打开/关闭的文章,结果发现它们几乎是一样的,而且都是双向的。真正的技巧实际上是将scrollHandler()函数移到handleEyeCatcher()之外。如果你加上你的评论作为回答,我会接受的。
/* Crate Slug */
    function convertToSlug(text) {
        return text
        .toLowerCase()
        .replace(/[^\w ]+/g,'')
        .replace(/ +/g,'-');
    }

    /**/
        function handleEyeCatcher(slug){
            console.log($.cookie());
            console.log(slug);
            /* If not set, create default cookie */
            if(!$.cookie(slug)) {
                $.cookie(slug, 'true', { expires: 7 });
                $('#eye-catch').addClass('visible');
            }

            /* Status */
            var status = $.cookie(slug);
            console.log(status);

            /* Scroll Function */
            function scrollHandler () {
                var height = $(window).height();
                if ($(this).scrollTop() > height) {
                    $('#eye-catch').removeClass('invisible');
                    $('#eye-catch').addClass('visible');
                } else {
                    $('#eye-catch').removeClass('visible');
                    $('#eye-catch').addClass('invisible');
                }
            }
            /* Hide/show element depending on cookie */
            if(status == 'true'){
                console.log('it is opened');
                $(window).bind('scroll', scrollHandler);
            } else {
                $(window).unbind('scroll', scrollHandler);
                console.log('it is closed');
                $('#eye-catch').removeClass('visible');
                $('#eye-catch').addClass('invisible');
            }
        }
    $(document).ready(function(){
        /* Get raw slug */
            var rawSlug= $('#eye-catch .title').text();
        /* Convert to cookie name friendly slug */
            var slug = convertToSlug(rawSlug);

        handleEyeCatcher(slug);

        /* Hide and update cookie on click */
        $('#eye-catch .close').on('click', function(){
            $.cookie(slug, 'false', { expires: 7 });
            handleEyeCatcher(slug);
        });

        /* Revert action */
        $('#revert').on('click', function(){
            $.cookie(slug, 'true', { expires: 7 });
            handleEyeCatcher(slug);
        });
    });