Jquery延迟事件

时间:2011-06-05 00:23:56

标签: jquery delay

$('#cart > .heading a').bind('mouseenter', function() {
    $('#cart').addClass('active');


    $.ajax({
        url: 'index.php?route=checkout/cart/update',
        dataType: 'json',
        success: function(json) {
            if (json['output']) {
                $('#cart .content').html(json['output']);
            }
        }
    });         

    $('#cart').bind('mouseleave', function() {
        $(this).removeClass('active');
    });
});

我需要在mouseleave上延迟removeClass。我可以简单地添加一个this.delay行吗?

2 个答案:

答案 0 :(得分:5)

您可以使用setTimeout()

$('#cart').bind('mouseleave', function() {
    var $that = $(this);
    setTimeout(function(){$that.removeClass('active');}, 500); //500 millisec delay
});

答案 1 :(得分:3)

$('#cart > .heading a').hover(function() {
    // clear the previously defined timeout if any
    clearTimeout($(this).data('timeout'));
    $(this).addClass('active');
    // do other stuff here
}, function() {
    // set timeout and save it in element's state
    // so it could be removed later on if needed
    var e = $(this).data('timeout', setTimeout(function() {
        e.removeClass('active');
    }, 3 * 1000)); // 3 sec.
});

这样.removeClass('active')只有在鼠标位于元素之外时才会采取行动。