2011-06-01 68 views
1

我有以下的jQuery代码:jQuery的addClass()不工作给予ID

$.ajax({ 
    type: "POST", 
    url: "/search", 
    data: $("form").serialize(), 
    success: function(data) { 
    $("#tab").addClass("loading"); // THIS LINE DOESN'T WORK 
    // . . . LOAD SEARCH RESULTS HERE (USUALLY TAKES SEVERAL SECONDS) . . . 
    $("#tab").removeClass("loading"); 
    } 
}); 

而且我有以下的CSS:

.loading { 
    background: transparent url(../resources/images/loading.gif) no-repeat right center; 
    text-indent: -1000px; 
} 

而且我有以下相关的HTML:

<div id="tab"> 
    <table id="searchResultsGrid"></table> 
</div> 

我不能让行$("#tab").addClass("loading")工作。在FireBug中观看时,类.loading永远不会被添加到#tab对象。我做错了什么?

谢谢!

+0

什么是HTML看起来像?为什么在ajax调用成功之后添加加载类?你应该在ajax调用之前添加它,然后在成功函数中删除它 – Trey 2011-06-01 16:54:10

+0

也许它是因为你同时添加和删除? – 2011-06-01 16:54:46

+0

实际加载搜索结果需要几秒钟,这就是我想要显示的进度。 – 2011-06-01 16:58:12

回答

4

试试这个。什么是可能发生的是,它的添加和删除loading类的速度不够快,它本身

// add the class before the ajax call 
$("#tab").addClass("loading"); 

$.ajax({ 
    type: "POST", 
    url: "/search", 
    data: $("form").serialize(), 
    success: function(data) { 
    // . . . LOAD SEARCH RESULTS HERE . . . 
    } 
    complete: function(data) { 
    // remove the class on complete, not success, in case of an error 
    $("#tab").removeClass("loading"); 
    } 
}); 
+2

您也可以使用beforeSend在ajax启动之前添加类 – Andre 2011-06-01 17:00:18

+0

添加“完成”回调函数并将“addClass()”移动到“成功”回调的外部是有诀窍的。谢谢! – 2011-06-01 17:07:52

0

几步没有看到的HTML,这很难说,但有一点突出的是,你要添加的类一旦ajax调用返回成功。尝试更改为:

$("#tab").addClass("loading"); 

$.ajax({ 
    type: "POST", 
    url: "/search", 
    data: $("form").serialize(), 
    success: function(data) { 
    // . . . LOAD SEARCH RESULTS HERE . . . 
    $("#tab").removeClass("loading"); 
    } 
}); 
0

您应该在ajax调用之前设置类,然后在成功函数中将其删除。你正在做的是设置它,然后在相同的代码执行中删除它。在代码完成执行之前,该类不会进行可视化更新,此时您已经删除了该类。

0

首先你addClass加载,那么你removeClass加载,这就是为什么你没有看到它的工作,你应该在AJAX调用之前添加加载类,当调用返回成功,你可以removeClass