我做了一个像这样工作的喜欢/不喜欢的脚本:带有rate_deal
类的2个按钮。单击like或dislike按钮时,它会从两个按钮中删除rate_deal
类,以防止再次单击,然后添加一些类以使其更好看。
我有问题。我不知道我做错了什么,但是当我点击按钮时,我无法删除两个按钮的rate_deal
类。
以下是代码:
HTML:
<div class="content_r_d_left_rate" id="deal-1">
<span class="rate_deal content_r_d_l_rate_img_up"></span>
<span class="rate_deal content_r_d_l_rate_img_down"></span>
</div>
jQuery的:
$(".rate_deal").click(function(){
var dealIdRaw = $(this).parent().attr('id');
var dealId = dealIdRaw.replace('deal-', '');
$('#'+dealIdRaw).children().removeClass('rate_deal');
if($(this).hasClass('content_r_d_l_rate_img_up'))
{
$('#'+dealIdRaw+' > .content_r_d_l_rate_img_down').addClass('content_r_d_l_rate_img_down_i');
$('#'+dealIdRaw+' > .content_r_d_l_rate_img_down').removeClass('content_r_d_l_rate_img_down');
}
else
{
$('#'+dealIdRaw+' > .content_r_d_l_rate_img_up').addClass('content_r_d_l_rate_img_up_i');
$('#'+dealIdRaw+' > .content_r_d_l_rate_img_up').removeClass('content_r_d_l_rate_img_up');
}
});
答案 0 :(得分:5)
您编写代码的方式存在结构性问题。当你这样做时:
$(".rate_deal").click(function(){
从现在开始,锁定点击处理程序的DOM对象,无论它们是否继续附加rate_deal
类。因此,在结构上,删除类时不会删除单击处理程序。
您可以使用如下的委托事件处理来解决该问题:
$(".content_r_d_left_rate").on("click", ".rate_deal", function(){
这将只在".rate_deal"
类位于单击的对象上时触发单击处理程序。
这个区块:
var dealIdRaw = $(this).parent().attr('id');
var dealId = dealIdRaw.replace('deal-', '');
$('#'+dealIdRaw).children().removeClass('rate_deal');
也可以替换为以下任何一个选项:
$(this).siblings().add(this).removeClass("rate_deal");
$(this).parent().find(".rate_deal").removeClass("rate_deal");
$(this).closest(".content_r_d_left_rate").find(".rate_deal").removeClass("rate_deal");
$(this).parent.children().removeClass("rate_deal");
我更喜欢第三种变体,因为如果你稍微修改HTML,它最容易破坏。
整个简化代码块将是:
$(".content_r_d_left_rate").on("click", ".rate_deal", function(){
// get our common parent
var parent = $(this).closest(".content_r_d_left_rate");
// remove existing .rate_deal classes in this block
// so no more clicks get processed
parent.find(".rate_deal").removeClass("rate_deal");
// toggle classes based on what was clicked
if($(this).hasClass("content_r_d_l_rate_img_up")) {
parent.find(".content_r_d_l_rate_img_down")
.addClass("content_r_d_l_rate_img_down_i")
.removeClass("content_r_d_l_rate_img_down");
} else {
parent.find(".content_r_d_l_rate_img_up")
.addClass("content_r_d_l_rate_img_up_i")
.removeClass("content_r_d_l_rate_img_up");
}
});
答案 1 :(得分:-1)
由于您只是想在点击时删除该类以防止进一步操作,您可以执行此操作 -
$('.rate_deal').bind('click',function(){
$(this).parent().children().removeClass('rate_deal'); //this will remove 'rate_deal' class from both of them.
//here you can put your change image for up/down thumb logic.
})