悬停在动态添加类的元素上

时间:2015-05-18 13:10:39

标签: jquery

如果元素没有hover

,我会在元素上使用click'disabled'个事件
$('.stars').each(function () {
    var rating = $(this).parent().parent().find('#rating-input').val(),
        $stars = $(this).children();

    if (rating > 0) {
        $stars.filter(':lt(' + rating + ')').addClass('selected');
    }
    if (!$(this).hasClass('disabled')) {
        $stars.hover(function() {
            var idx = $(this).index();
            $stars.removeClass('selected').slice(0, idx + 1).addClass('selected');
        }, function() {
            var rating = $(this).parent().parent().find('#rating-input').val();
            $stars.removeClass('selected').slice(0, rating).addClass('selected');
        }).click(function() {
            var rating = ($(this).index() + 1);
            $(this).parent().parent().find('#rating-input').val(rating);
        });
    } 
});

但课程'禁用'我是动态添加的,因此hoverclick即使在课程“禁用”后也能继续工作。加入。如何使它动态添加类?

1 个答案:

答案 0 :(得分:1)

由于动态添加了类,因此条件检查也应该动态发生。

在这种情况下,一种选择是使用事件委托,但在这种情况下,我认为检查事件处理程序中的条件会更容易

$('.stars').each(function () {
    var rating = $(this).parent().parent().find('#rating-input').val(),
        $stars = $(this).children();

    if (rating > 0) {
        $stars.filter(':lt(' + rating + ')').addClass('selected');
    }
    $stars.hover(function () {
        if ($(this).hasClass('disabled')) {
            return 
        }
        var idx = $(this).index();
        $stars.removeClass('selected').slice(0, idx + 1).addClass('selected');
    }, function () {
        if ($(this).hasClass('disabled')) {
            return 
        }
        var rating = $(this).parent().parent().find('#rating-input').val();
        $stars.removeClass('selected').slice(0, rating).addClass('selected');
    }).click(function () {
        if ($(this).hasClass('disabled')) {
            return 
        }
        var rating = ($(this).index() + 1);
        $(this).parent().parent().find('#rating-input').val(rating);
    });
});