开发者问题收集

根据当前类别点击更改类别

2015-03-05
121

我想要一个简单的 FontAwesome 图标:

<div class="emotion">
    <i class="fa fa-smile-o"></i>
</div>

并根据当前类交换类:

$(".emotion .fa-smile-o").click(function (){
    $(this).removeClass('fa-smile-o').addClass("fa-meh-o");
});
$(".emotion .fa-meh-o").click(function (){
    $(this).removeClass('fa-meh-o').addClass("fa-frown-o");
});
$(".emotion .fa-frown-o").click(function (){
    $(this).removeClass('fa-frown-o').addClass("fa-smile-o");
});

但目前这仅适用于第一个类更改。我做错了什么?

2个回答

使用 事件委托 ,因为当您添加点击事件时,在页面上,没有带有类 .fa-frown-o.fa-meh-o 的元素>

$(".emotion").on('click', '.fa-smile-o', function (){
    $(this).removeClass('fa-smile-o').addClass("fa-frown-o");
});
$(".emotion").on('click', '.fa-meh-o', function (){
    $(this).removeClass('fa-meh-o').addClass("fa-frown-o");
});
$(".emotion").on('click', '.fa-frown-o', function (){
    $(this).removeClass('fa-frown-o').addClass("fa-smile-o");
});
Oleksandr T.
2015-03-05

问题是,当这些绑定器运行时,那些类不在您要求的元素上。因此,只有第一个可以工作,因为当这些代码运行时它已经是那个类了。

因此,为了解决这个问题,您应该这样做:

$(".emotion .fa").click(function (){
    if($(this).hasClass('fa-smile-o')) {
       $(this).removeClass('fa-smile-o').addClass("fa-frown-o");
       return;
    }
    if($(this).hasClass('fa-meh-o')) {
       $(this).removeClass('fa-meh-o').addClass("fa-frown-o");
       return;
    }
    if($(this).hasClass('fa-frown-o')) {
       $(this).removeClass('fa-frown-o').addClass("fa-smile-o");
       return;
    }
});
Dariush Alipour
2015-03-05