2011-06-01 61 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