2013-10-31 18 views
0

刷新起初我動態創建一個類似下面的一些內容:div的內容(文本)沒有被正確

var newItem = '<div title="' + elem.IP + '" id="' + elem.Alias + '-Status" class="elementStatus"><div class="image" id="' + elem.Alias + '-StatusImg"></div><div id="' + elem.Alias + '-StatusTxt" class="text">Waiting...</div></div>'; 

後來,我執行了一個jQuery AJAX調用,它是像下面的網頁上的按鈕後點擊:

function doTask(task, urlDoTask) { 
    return ajax({ 
     url: this.getRootDir() + urlDoTask, 
     data: { hostNameOrAddress: task.IP }, 
     beforeSend: setStatusTxt(task.Alias, 1), 
     type: 'POST' 
    }).then(function (data) { 
     setStatusTxt(task.Alias, 2); 
     return ok(createObject("status", "ok", "op", "doTask", "task", task, "data", "OK")); 
    }, function (data) { 
     setStatusTxt(task.Alias, 3); 
     return ok(createObject("status", "fail", "op", "doTask", "task", task, "data", "KO")); 
    }); 
} 

我所試圖做的是通過調用函數setStatusTxt發送Ajax調用之前和Ajax調用來更新一個新的文本和字體顏色(elem.Alias +「-StatusTxt」)div的內容(文本)完成(成功與否),見下文:

function setStatusTxt(elemId, msgType) { 

    if (msgType === 1) { 
     $('#' + elemId + '-StatusTxt').text("Ongoing...").addClass("hilightedStatusTxtOngoing"); 
    } 
    else (msgType === 2) { 
     $('#' + elemId + '-StatusTxt').text("OK").addClass("hilightedStatusTxtOK"); 
    } 
    else { 
     $('#' + elemId + '-StatusTxt').text("KO").addClass("hilightedStatusTxtKO"); 
    } 

}

CSS

.hilightedStatusTxtOngoing 
{ 
    color: inherit; 
} 

.hilightedStatusTxtOK 
{ 
    color: Green; 
} 

.hilightedStatusTxtKO 
{ 
    color: Red; 
} 

在網頁第一次按鈕被點擊它可以正常使用:文字與正確的字體顏色正確更新(我應該說,第一時間,瀏覽器歷史記錄和cookies,並且所有內容都會被刪除,但不會在下次)。一旦任務完成,在視圖頁面仍然是div內容中當前顏色的文本。現在,在這種狀態下,如果我通過單擊頁面中的按鈕再次執行ajax調用,並且msgType(作爲參數傳遞給setStatusTxt函數)與當前不同,文本('#'+ elemId +'--StatusTxt 'div的內容)正確地更新/刷新到新的,但沒有正確的顏色,我的意思是,字體顏色不更新/刷新與新的文字保持與以前的顏色。

爲什麼文本顏色不更新?

回答

1

您需要從元素中刪除的其他類。

$('#' + elemId + '-StatusTxt').text("OK") 
    .removeClass("hilightedStatusTxtOngoing") 
    .removeClass("hilightedStatusTxtKO") 
    .addClass("hilightedStatusTxtOK"); 

對所有三種消息類型都這樣做。

如果是簡單的,你可以創建一個簡短的輔助函數。

function changeStatus($e, className) { 
    return $e.removeClass("hilightedStatusTxtOngoing") 
     .removeClass("hilightedStatusTxtKO") 
     .removeClass("hilightedStatusTxtOK") 
     .addClass(className); 
} 

並調用像這樣:

var $e = $('#' + elemId + '-StatusTxt'); 
if (msgType === 1) { 
    changeStatus($e, "hilightedStatusTxtOngoing").text("Ongoing..."); 
} // and so on... 
+0

Woowwww,很多感謝的對你很好的例子!我花了幾個小時思考如何去做,但沒有成功。那麼...我是新手jquery ....現在我想使用你所說的幫助函數,但我不知道'$ e'是什麼。我以這種方式調用函數:changeStatus('#'+ elemId +'-StatusTxt',「hilightedStatusTxtOngoing」)。text(「Ongoing ...」);並且我使用的changeStatus的簽名與您所說的相同,即:changestatus($ e,className),但它不起作用。我究竟做錯了什麼? – user1624552

+0

關閉,只需要用'$()'來包裝它。即:'$('#'+ elemId +'--StatusTxt');'。查看更新答案的底部代碼塊。 – azz

+0

非常感謝,它的工作原理;) – user1624552