第二次单击后,jQuery-onclick事件不会更改类
jQuery - onclick event does not change class after second click
功能:
当我点击类为thumb_like
或thumb_unlike
的元素时,我会像POST一样添加/删除图像。类别为thumb_count
的元素将根据用户的操作而增加/减少。如果他喜欢在当前计数上加1等…
thumb_unlike是用户不喜欢图像的默认状态
问题:
当我点击类为thumb_like
/thumb_unlike
的元素时,它会按照指示进行操作,但第二次点击不会更改类,用户可以添加/删除不止一个类似(将thumb_count增加1)
HTML标记:
<div class="image_box">
<div class="image">...</div>
<div class="image_info">
<div class="thumb_like" data-id="1"></div>
<div class="thumb_count">10</div> likes | 0 comments
</div>
</div>
<div class="image_box">
<div class="image">...</div>
<div class="image_info">
<div class="thumb_unlike" data-id="2"></div>
<div class="thumb_count">55</div> likes | 0 comments
</div>
</div>
Javascript
$(document).ready(function() {
$(".thumb_unlike").click(function () {
var image_id = $(this).attr('data-id');
var count = $(this).next(".thumb_count").text();
$(this).next(".thumb_count").html(parseInt(count) + 1)
$.post('..url..' + image_id);
$(this).removeClass();
$(this).addClass('thumb_like');
});
$(".thumb_like").click(function () {
var image_id = $(this).attr('data-id');
var count = $(this).next(".thumb_count").text();
$(this).next(".thumb_count").html(parseInt(count) - 1)
$.post('..url..' + image_id);
$(this).removeClass();
$(this).addClass('thumb_unlike');
});
});
当函数被调用时,监听器会附加到元素上。按照你的方式,听众自己也会竖起大拇指。我认为解决这一问题最简单的方法是将侦听器附加到父元素并将其委托给拇指。像这样:
$('.parent_div').on('click', '.thumb_like', function() {
//thumb_like code here
});
$('.parent_div').on('click', '.thumb_unlike', function() {
//thumb_like code here
});
如果您想要切换功能,我建议您使用一个函数。你可以做到这一点,甚至不需要像这样调整你的HTML:
$(function() {
$('body').on('click', '.thumb_like, .thumb_unlike', function() {
var image_id = $(this).attr('data-id'),
isLike = $(this).hasClass('thumb_like');
$(this).toggleClass('thumb_like thumb_unlike')
.next('.thumb_count')
.text(function(_, i) { return +i + (isLike ? 1 : -1); });
$.post('..url..', {
id: image_id,
action: isLike ? 'like' : 'unlike'
});
});
});
正如evan所建议的,这将一个函数绑定到更高的div,但也允许更少的代码、更少的事件处理程序,并且(IMO)更容易维护,因为只处理一次逻辑。您还可以为like&不像
你可以在这里用小提琴演奏。
相关文章:
- 如何使用2个事件单击1个日历
- 在 javascript 事件单击后清空输入
- 在元素 SVG 中使用 JavaScript 或 jQuery 进行事件单击
- fullCalendar动态事件单击行为
- 错误:'这'对象不正确;在JQuery中单击事件-单击时的意外行为
- 如何启用事件单击仅在指定的小时范围内
- 完整日历事件单击未触发
- 打开选择之前的事件.(单击工作速度不够快)
- 在 JavaScript 中,函数不会在事件单击时触发
- 主干分组依据集合仅在一次事件单击后呈现
- 如何禁用地图上的所有鼠标事件(单击、悬停等)
- Fullcalendar将图标添加到事件而不触发事件单击
- 在将JQuery对象添加到DOM之前,请将事件单击到JQuery对象
- 如何模拟拖动事件(单击鼠标移动按钮)
- 如果可编辑为 false,则全日历事件单击处理程序不起作用
- onclick事件单击时未添加类
- 事件单击Kml Placemark
- 事件单击时没有运行数据库
- 在事件单击函数中添加href url
- 创建元素和事件(单击)