如果css类具有display:none,则jQuery Show不起作用

如果css类具有display:none,则jQuery Show不起作用,jquery,html,css,Jquery,Html,Css,我有一个叫做加载的类,如下所示: .loading { display: none; vertical-align: top; margin: 0; padding: 0; background: url('../images/shared/loading_16x16.gif') center center no-repeat; width: 16px; height: 16px; } 使用以下html代码段: <div id="loa

我有一个叫做加载的类,如下所示:

.loading {
   display: none;
   vertical-align: top; 
   margin: 0; 
   padding: 0; 
   background: url('../images/shared/loading_16x16.gif') center center no-repeat; 
   width: 16px; 
   height: 16px;
}
使用以下html代码段:

<div id="loading" class="loading"></div>
但是
show()
根本不起作用。即使我从chrome开发者窗口触发它。 在chrome developer窗口中,如果我取消选中loading类中的
显示:none
,则会出现标记

发生了什么事?

使用
$(“#加载”).show()而不是
$(“#加载”).show().children().show()

您可以在本地实例中尝试此操作,尽管它完成得非常快,所以您无法查看
加载

为了验证这一点,您只需从代码中转储加载隐藏行,然后可以尝试,现在您可以找到加载文本

      complete: function () {
               // $("#loading").hide();
            }

您的代码无法工作,因为您将类与ID混合在一起。 在css中有一个
.loading
类,但在jQuery中使用id选择器
$(“#loading”)
。jQuery根本找不到元素。

请尝试以下操作:

$.ajaxSetup({
      beforeSend:beforeSendFunction(),
      complete:onCompleteFunction()
  });
  });
  function beforeSendFunction(){
      setTimeout(function(){
          $("#loading").show();
      },2000)
  }
  function onCompleteFunction(){
      $("#loading").hide();
  }
您可以在beforesend中删除setTimeout函数

这是正在工作的JSFIDLE链接,我将背景图像替换为背景颜色:“

我刚刚想出来

我通过在jQuery上执行以下操作来修复它:

$.ajaxSetup({
     beforeSend: function () {
         $("#loading.loading").show();
     },
     complete: function () {
         $("#loading.loading").hide();
     }
});

希望对其他人有所帮助:)

事实上,我自己也遇到过这个问题,有一个更简单的解决方案。只需删除该类

$('#loading').removeClass('loading');

请求是否发生得如此之快以至于您无法看到它?
$(“#加载”).hide().children().hide()是不必要的。可见性是继承的。您试过只运行breforeSend部分吗?我相信问题在于ajax调用几乎立即执行并完成。默认情况下,Show的延迟为300毫秒,因此如果您的ajax函数在50毫秒内执行,它将在元素可见之前隐藏。Javascript具有比css规则更高的优先级,因为它会内联应用规则。我猜测的是,该规则应用于不同的元素,并且您有一个选择器问题。试着手动运行它,看看它在哪里被应用。为什么不呢#加载是div的有效选择器。请查看
HTML
<代码>加载
id和类选择器存在。元素是用#加载选择器创建的
$('#loading').removeClass('loading');