Подтвердить что ты не робот

В JQuery можно ли получить функцию обратного вызова после установки нового правила css?

У меня есть $('.element').css("color","yellow"), и мне нужно, чтобы следующее событие было только после этого, что-то похожее на $('.element').css("color","yellow",function(){ alert(1); }) Мне нужно это, потому что:

$('.element').css("color","yellow");
 alert(1);

события происходят в одно время почти, и этот момент вызывает ошибку в эффекте анимации (предупреждение (1) только здесь, например, в реальном модуле это анимация)

4b9b3361

Ответ 1

Обратные вызовы необходимы только для асинхронных функций. Функция css всегда будет завершена до завершения выполнения кода, поэтому обратный вызов не требуется. В коде:

$('.element').css('color', 'yellow');
alert(1);

Цвет будет изменен до срабатывания предупреждения. Вы можете подтвердить это, выполнив:

$('.element').css('color', 'yellow');
alert($('.element').css('color'));

Другими словами, если вы хотите использовать обратный вызов, просто выполните его после функции css:

$('.element').css('color', 'yellow');
cb();

Ответ 2

вы можете использовать обещание

$('.element').css("color","yellow").promise().done(function(){
    alert( 'color is yellow!' );
});

http://codepen.io/onikiienko/pen/wBJyLP

Ответ 3

Вы можете использовать setTimeout для увеличения времени ожидания между предупреждением и css следующим образом:

function afterCss() {
    alert(1);
}

$('.element').css("color","yellow");
setTimeout(afterCss, 1000);

Это приведет к появлению предупреждения через 1 секунду после того, как были изменены изменения css.

Этот ответ устарел, поэтому вы можете использовать promises из ES6 как ответ выше.


$('.element').css("color", "yellow").promise().done(function(){
    // The context here is done() and not $('.element'), 
    // be careful when using the "this" variable
    alert(1);
});

Ответ 4

Нет никакого обратного вызова для функции jquery css. Однако мы можем обойти, это не очень хорошая практика, но она работает.

Если вы вызываете это сразу после внесения изменения

$('.element').css('color','yellow');
alert('DONE');

Если вы хотите, чтобы эта функция была вызвана сразу после изменения, выполните интервал цикла.

$('.element').css('color','yellow');
    var detectChange = setInterval(function(){
    var myColor = $('.element').css('color');
    if (myColor == 'yellow') {
    alert('DONE');
    clearInterval(detectChange); //Stop the loop
}
},10);

Чтобы избежать бесконечного цикла, установите предел

var current = 0;
$('.element').css('color','yellow');
    current++;
    var detectChange = setInterval(function(){
    var myColor = $('.element').css('color');
    if (myColor == 'yellow' || current >= 100) {
      alert('DONE');
      clearInterval(detectChange); //Stop the loop
    }
},10);

Или используя настройку, как указано выше/