聚合两个javascript事件函数
大家好,很抱歉问这个问题,但我不是javascript专家 我正在尝试将cookie警报框添加到我的网站中,我希望在用户单击按钮以及在50像素后滚动页面时设置cookie。我写了这两个函数,但我不知道如何链接它们聚合两个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
$(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。。