聚合两个javascript事件函数

聚合两个javascript事件函数,javascript,jquery,Javascript,Jquery,大家好,很抱歉问这个问题,但我不是javascript专家 我正在尝试将cookie警报框添加到我的网站中,我希望在用户单击按钮以及在50像素后滚动页面时设置cookie。我写了这两个函数,但我不知道如何链接它们 $(document).ready( function(){ $('.cookies-eu-ok').click(function(e){ e.preventDefault(); $.cookie('cookie_eu_consented', 'true', { p

大家好,很抱歉问这个问题,但我不是javascript专家

我正在尝试将cookie警报框添加到我的网站中,我希望在用户单击按钮以及在50像素后滚动页面时设置cookie。我写了这两个函数,但我不知道如何链接它们

$(document).ready( function(){
  $('.cookies-eu-ok').click(function(e){
    e.preventDefault();
    $.cookie('cookie_eu_consented', 'true', { path: '/', expires: 365 });
    $('.cookies-eu').remove();
  });
});

$document.scroll(function() {
  if ($document.scrollTop() >= 50) {
    e.preventDefault();
    $.cookie('cookie_eu_consented', 'true', { path: '/', expires: 365 });
    $('.cookies-eu').remove();
  }
});

这是您可以做的:

var setCookie = function() {
    $.cookie('cookie_eu_consented', 'true', {
        path: '/',
        expires: 365
    });
    $('.cookies-eu').remove();
};

var $document = $(document); // Caching
$document.ready(function() {
    $('.cookies-eu-ok').on('click', function(e) {
        e.preventDefault();
        setCookie();
    });
});

// Run only once until cookie is set
$document.on('scroll', function(e) {
    if ($document.scrollTop() >= 50) {
        e.preventDefault();
        setCookie();
        $document.off('scroll');
    }
});
  • 为通用功能创建单独的功能
  • 在相同元素上链接事件
  • 缓存
    $(文档)
  • 在上使用
    而不是
    单击
    <代码>单击内部的
    调用

  • 您可以创建一个可以在处理程序之间共享的函数(为简单起见,DRY等),如下所示:

    function saveConsentCookie () {
        $.cookie('cookie_eu_consented', 'true', { path: '/', expires: 365 });
        $('.cookies-eu').remove();
    }
    
    $(document).on({
        ready: function () {
            $('.cookies-eu-ok').click(function (e) {
                saveConsentCookie();
                e.preventDefault();
            })
        },
        scroll: function scrollCheck () {
            if ($(this).scrollTop() >= 50) {
                saveConsentCookie();
                $(this).off('scroll', scrollCheck);
            }
        }
    });
    
    您可以为以下两个事件设置处理程序:

    function saveConsentCookie () {
        $.cookie('cookie_eu_consented', 'true', { path: '/', expires: 365 });
        $('.cookies-eu').remove();
    }
    
    $(document).on({
        ready: function () {
            $('.cookies-eu-ok').click(function (e) {
                saveConsentCookie();
                e.preventDefault();
            })
        },
        scroll: function scrollCheck () {
            if ($(this).scrollTop() >= 50) {
                saveConsentCookie();
                $(this).off('scroll', scrollCheck);
            }
        }
    });
    

    请注意,
    scroll
    处理程序函数有一个名称(
    scrollCheck
    ),以便在完成其工作后将其删除。如果没有这个,你的页面将检查是否需要永远设置cookie

    我认为,你的ready函数应该涵盖所有的功能,为什么你要链接它们,它们基本上都在做相同的事情?或者您希望避免重复代码?然后你应该使用一个函数请告诉我你面临的确切问题。我想避免代码重复:)对
    滚动
    的回调应该有
    e
    parameter@devnull69抢手货谢谢,我宁愿删除
    e.preventDefault()来自滚动处理程序,因为没有什么可以阻止它。这可能会增加一些滚动的问题disabled@KremnevSergey我不确定。OP使用了它,所以我保留了它。我不知道OP是否希望每次触发
    scroll
    事件并且页面从顶部开始>50px时都重新设置cookie。。