只有当cookie存在时才添加addClass,否则隐藏
addClass only if cookie exists else hide
我试图使一个投票系统,将检查当用户投票,然后改变html项目css从"投票"到"谢谢"和背景颜色为"绿色"。
现在这工作得很好,但我需要使选项当用户刷新页面检查cookie是否存在(cookie已经设置=变量是voteCookie('id')),然后应用class="存在"。如果它不存在,隐藏这个类。那个班级只会说"谢谢投票",别无其他。
jQuery:$(window).ready(function() {
var voteId = $('.gallery-item a');
$(voteId).on('click', function() {
$(this).text('Thank you!');
$(this).css('background-color', 'green');
});
});
您可以这样做(使用jQuery cookie插件可以使它更容易),但这不是cookie的正确用例。每个HTTP请求都会从客户端发送cookie到服务器;如果你没有在每个HTTP请求中使用这些信息,那就是完全不必要的数据传输。
考虑本地存储,几乎所有浏览器都支持本地存储,甚至包括IE8:
$(document).ready(function() {
var voteLink = $('.gallery-item a');
if (localStorage.getItem("voted")) {
voteLink.text('Thank you for voting').addClass('voted');
} else {
voteLink.one('click', function() {
localStorage.setItem("voted", "yes");
$(this).text('Thank you!');
voteLink.addClass('voted');
// If you wanted to do something with *just* the elements that weren't
// clicked, you could do:
// voteLink.not(this).addClass('unused-vote');
// ...or similar
});
}
});
…但是如果你想使用cookie,使用jQuery cookie插件,你只需要将getItem
行改为if ($.cookie('voted'))
, setItem
行改为$.cookie('voted', 'yes');
我在上面也做了一些其他的改变:
我使用
document
而不是window
和ready
-文档只讨论document
,而不是window
。(也就是说,我通常不喜欢使用ready
;相反,我只是确保脚本位于HTML的末尾,就在关闭</body>
标记之前。我叫变量
voteLink
而不是voteId
,因为它是一个jQuery对象包含一个a
元素,而不是一个ID。我将
$(voteId)
更改为voteLink
,因为对象已经是一个jQuery对象,不需要再次通过$()
。我将直接样式操作更改为您添加的类,以便更好地分离逻辑和样式。
当他们已经投票时,我添加了相同的类。
我使用
one
而不是on
,以便我们在第一次点击时删除点击处理程序。
显然,这里只有客户端代码。我假设有一个验证投票等的服务器部分(因为您不能信任客户端发送或为您存储的任何内容)。
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 显示5秒后隐藏潜水
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 浮动页脚栏-使用Bootstrap隐藏
- 在jquery中为显示/隐藏设置cookie
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 从var向代码隐藏函数传递值
- Image赢得't隐藏在滚动jQuery上
- 具有rowGrouping的数据表无法隐藏列
- Jquery隐藏未触发
- JavaScript 检查隐藏字段中的值并将其设置为隐藏字段值
- 分部隐藏在jquery中不起作用
- 点击后隐藏潜水?(但如果Div是一面旗帜呢?)
- javascript.点击隐藏事件故障
- 禁用(而不是隐藏)浏览器滚动条
- PHP Javascript显示/隐藏按钮不工作
- 只有当cookie存在时才添加addClass,否则隐藏
- addClass隐藏于ng-click angularJS中
- 当隐藏输入的值动态变化时,jQuery addClass