Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery添加类,等等,然后更改该类?_Jquery - Fatal编程技术网

jQuery添加类,等等,然后更改该类?

jQuery添加类,等等,然后更改该类?,jquery,Jquery,我需要在单击元素时添加一个类(例如转换),然后等待1秒并更改该类(例如完成转换) 我试过这个: $(this).addClass('transition').delay(1000).addClass('active'); 更新-为什么以下操作不起作用?当我取消注释警报时,我可以看到它在正确的时间触发,但是addClass和removeClass被忽略 $('.target').click(function() { $(this).addClass('transition');

我需要在单击元素时添加一个类(例如转换),然后等待1秒并更改该类(例如完成转换)

我试过这个:

$(this).addClass('transition').delay(1000).addClass('active');
更新-为什么以下操作不起作用?当我取消注释警报时,我可以看到它在正确的时间触发,但是
addClass
removeClass
被忽略

$('.target').click(function() {

    $(this).addClass('transition'); 

    $('.target').not(this).removeClass('active transition');

    setTimeout(function(){  
        $(this).removeClass('transition');
        $(this).addClass('active');
        //  alert('test');
    },300);

});
$('p').css('color','red')。延迟(1000)。队列(
功能(aaa)
{
$(this.css('color','green');
$(this).dequeue();//
$('p').css('color','red').delay(1000).queue(
功能(aaa)
{
$(this.css('color','green');
$(this).dequeue();//您可以使用setTimeout(),如下所示:

$('.target').click(function () {
    var $target = $(this);

    $target.addClass('transition');

    $('.target').not(this).removeClass('active transition');

    setTimeout(function () {
        $target.removeClass('transition').addClass('active');
    }, 1000);
});
$('.target').click(function () {
    $(this).addClass('transition');

    $('.target').not(this).removeClass('active transition');

    setTimeout($.proxy(function () {
        $(this).removeClass('transition').addClass('active');
    }, this), 1000);
});

我认为代码的问题在于,您试图在传递给setTimeout()的函数中使用
$(this)
,但在该函数中
this
不引用元素。上面的代码通过定义
$target
变量来避免这种情况

修复代码的另一种方法是使用
$.proxy()
函数设置回调函数的上下文,如下所示:

$('.target').click(function () {
    var $target = $(this);

    $target.addClass('transition');

    $('.target').not(this).removeClass('active transition');

    setTimeout(function () {
        $target.removeClass('transition').addClass('active');
    }, 1000);
});
$('.target').click(function () {
    $(this).addClass('transition');

    $('.target').not(this).removeClass('active transition');

    setTimeout($.proxy(function () {
        $(this).removeClass('transition').addClass('active');
    }, this), 1000);
});
可以使用setTimeout(),如下所示:

$('.target').click(function () {
    var $target = $(this);

    $target.addClass('transition');

    $('.target').not(this).removeClass('active transition');

    setTimeout(function () {
        $target.removeClass('transition').addClass('active');
    }, 1000);
});
$('.target').click(function () {
    $(this).addClass('transition');

    $('.target').not(this).removeClass('active transition');

    setTimeout($.proxy(function () {
        $(this).removeClass('transition').addClass('active');
    }, this), 1000);
});

我认为代码的问题在于,您试图在传递给setTimeout()的函数中使用
$(this)
,但在该函数中
this
不引用元素。上面的代码通过定义
$target
变量来避免这种情况

修复代码的另一种方法是使用
$.proxy()
函数设置回调函数的上下文,如下所示:

$('.target').click(function () {
    var $target = $(this);

    $target.addClass('transition');

    $('.target').not(this).removeClass('active transition');

    setTimeout(function () {
        $target.removeClass('transition').addClass('active');
    }, 1000);
});
$('.target').click(function () {
    $(this).addClass('transition');

    $('.target').not(this).removeClass('active transition');

    setTimeout($.proxy(function () {
        $(this).removeClass('transition').addClass('active');
    }, this), 1000);
});

你能告诉我们你试过什么吗?2100这么重复,没有代码吗?伙计!你能告诉我们你试过什么吗?2100这么重复,没有代码吗?伙计!你可能想解释一下
addClass
不会直接与动画队列混在一起(因此
delay
)。您可能想解释一下,
addClass
不会直接与动画队列混合(因此,
delay
)。