Jquery改变css为时已晚?

时间:2017-04-25 09:48:21

标签: jquery

我有一些代码:

$(document).on('click', '.delete',function(e){
    e.preventDefault();
    $('.selector').css({'color':'#cc0000'});
    if(confirm('Do you want to remove')){
        $.ajax({
            ...
        });
    }
    else{
        // $('.selector').css('color','');
    }
});

但css在"确认"后改变颜色。如何在"确认"?

之前显示红色

4 个答案:

答案 0 :(得分:3)

问题是因为confirm()是模式调用,它阻止浏览器的UI线程更新。要解决此问题,您可以将confirm()置于setTimeout(),延迟时间非常短。另请注意,除非没有其他选择,否则应避免使用css()。改为申请课程。试试这个:

$(document).on('click', '.delete',function(e){
  e.preventDefault();
  $('.selector').addClass('active');

  setTimeout(function() {
    if (confirm('Do you want to remove')) {
      $.ajax({
        // ...
      });
    }
    else {
      $('.selector').removeClass('active');
    }
  }, 25);
});
.active { color: #C00; }

答案 1 :(得分:1)

您需要使用回调函数。可悲的是css()不支持这一点。但是你可以使用animate(),时间为0秒。

   $(this).animate({CSS-PARAMETERS},0,function(){
      if(confirm(...)){
        ...
      }
   });

答案 2 :(得分:1)

我建议setTimeout

$(document).on('click', '.delete',function(e){
    e.preventDefault();
    $('.selector').css({'color':'#cc0000'});
    
    setTimeout(function(){
      if(confirm('Do you want to remove')){

      }
    }, 100);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="delete selector">Delete?</div>

答案 3 :(得分:0)

检查一下:

$(document).on('click', '.delete',function(e){
    e.preventDefault();
    $('.selector').css({'color':'#cc0000'});

    window.setTimeout(function()
    {
        if(confirm('Do you want to remove')){
            $.ajax({
                ...
            });
        }
        else{
            // $('.selector').css('color','');
        }
    }
    , 500);

});