Javascript 背景颜色转换并在 HTTP 响应上重置

标签 javascript jquery html css

我正在使用 Firefox 中的 ajax 向服务器发出 POST 请求。输入只是 div 中包含的框中的一些文本输入:

<div id="mydiv">
    ...stuff...
</div>

如果请求成功,我会调用处理程序来反射(reflect)该状态。如果请求有误,我会调用不同的处理程序。

$.ajax({
    type: 'POST',
    data: my_json,
    dataType: "json",
    url: "/my/url",
    success: function(result, status, xhr) {
        success_callback();
    },
    error: function(xhr) {
        error_callback();
    }

});

成功回调没有做太多事情。在错误回调中,我想将背景颜色属性更改为红色以直观地指示错误,然后淡出回原始背景颜色(例如白色)。

瞬间改变颜色很容易:

function success_callback() {

    var element = document.getElementById('mydiv');
    element.style.backgroundColor = "white";

}

function error_callback() {

    var element = document.getElementById('mydiv');
    element.style.backgroundColor = "red";

}

我尝试使用 CSS 动画进行淡入淡出,例如

CSS

.div.error {
     -webkit-animation-duration: 3s;
     -webkit-animation-name: error;
     animation-duration: 3s;
     animation-name: error;
} 
@-webkit-keyframes error {
    from {
        background-color: red;
    }
    to {
        background-color: white;
    }
}

然后在 JavaScript 中添加错误类:

JS

function error_callback() {

    if ($('.div').hasClass('error')) {
        $('.div').removeClass('error');
    else {
        $('.div').addClass('error');
    }
}

这在我第一次发送错误的 POST 请求时有效,但在后续的错误 POST 中不起作用,因为我认为 removeClass 工作不正常(或者更确切地说,我没有正确使用它) )。

我也尝试在这篇文章之后使用 jquery-ui CSS transition: fade background color, resetting after但这似乎对我不起作用。也许这与在按钮单击而不是 HTTP 响应的上下文中执行动画有关?

我的使用方向正确吗?如果可能的话,我希望保持在标准 jQuery 的范围内(即远离 jQuery UI)。

最佳答案

问题是因为在每个连续的请求中,您都会切换背景颜色,而不是将其设置为反射(reflect)上一个请求状态的状态。

要解决此问题,您可以在元素上设置 error 类,然后使用超时在任意时间(例如 10 秒)后删除该类:

function error_callback() {
  var $div = $('.div').addClass('error');
  setTimeout(function() {
    $div.removeClass('error');
  }, 10000);
}

请注意,正如 @Taplar 在下面的评论中提到的,您还需要记住在初始失败后不久发出第二个成功请求时删除 error 类。

关于Javascript 背景颜色转换并在 HTTP 响应上重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56363148/

相关文章:

javascript - 如何向 Angular2+ 中动态创建的元素添加属性?

javascript - 谷歌应用脚​​本: parsing strings as Date objects

javascript - textarea 是最适合显示/隐藏链接文本的 UI 元素,就像在 Google map 中一样吗?

javascript - 在 CSS 中定义自适应边界线

javascript - JQuery 仅在特定宽度下工作

javascript - 如何模拟 Later.JS 的时间

javascript - 检查互联网的 Jquery/Ajax 代码

javascript - 如何从SRC中过滤掉文件名?

javascript - 在 Angular 中添加记录后附加 HTML

c# - 如何在 Web 应用程序中更改文本框输入语言