2011-03-02 19 views
1

我有一個包含大約260行的數據表。這些行中的每一行均由諸如parentHeaderName之類的屬性標識。當點擊該表的頭,我有一些jQuery的的地方,簡單地更改了標題到ajaxload.gif圖像,這樣jQuery時機 - 想在方法中添加類似於DoEvents()的東西

$('#Header').html('<img src="images/ajaxload.gif"'); 

,然後我通過調用

$([parentHeaderName=something]).toggle(); 
切換所有260行

不幸的是,我無法獲得將代碼頭改爲ajaxload.gif以正確運行的部分代碼。就好像這個聲明和切換聲明都在同時運行。意思是說,用戶永遠不會看到ajaxload.gif。我可以讓圖像顯示的唯一方法是如果我在兩個語句之間放置警報('...')消息。顯然,這不是一個解決方案。我試過使用delay()和setTimeout無濟於事。我想我需要的是某種類似於jQuery或JavaScript的DoEvents,它可以在切換執行之前顯示圖像。

任何想法?

謝謝, 克里斯

更新:感謝您的反饋鄉親。下面是實際的代碼:(此代碼實際上改變了頭expand.gif或collapse.gif,而不是ajaxload.gif)

$('.sixdegreestypeheader').click(function() { 
    var headerName = $(this).attr("headername"); 
    var jq = "[headername$=" + headerName + "]"; 
    var jq2 = "[parentheadername$=" + headerName + "]"; 

    var originalTextValue = $(jq).text(); 
    var originalHTMLValue = $(jq).html(); 

    if (originalHTMLValue.indexOf("collapse") == -1) { 
     $(jq).html('<img src="images/collapse.gif" /> ' + originalTextValue); 
    } 
    else { 
     $(jq).html('<img src="images/expand.gif" /> ' + originalTextValue); 
    } 

    // alert('break here to act as a DoEvents.') // this forces the image change... but I don't want to have to use an alert to force this 
    $(jq2).toggle(); 

    return false; 
}); 

我曾嘗試延遲建議

$(jq2).delay(500).toggle(); 

但它沒有任何幫助。當需要切換的行數很少時 - 比方說,最多可達20個 - 沒有問題。但在某些情況下,我需要隱藏了一堆(例如260),它是彷彿瀏覽器需要幾秒鐘通過DOM突突做所有的事情隱藏的。這就是我最初希望使用ajaxload.gif圖像的原因。

謝謝, 克里斯

+0

請將您的代碼發送 –

回答

1

感謝大家的幫助。事實證明,問題更多的是使用toggle()語句,然後是其他任何東西。 .toggle()這麼多的記錄是導致瀏覽器掛起的原因,不管我在.delay(),.when()等方面做了什麼。我最終做了一個直接的.hide()和.show(),並且這些更改加快了預期行爲。爲了確定當前的可見性(從而知道我是否應該.hide()或.show()),我檢查了第一個匹配元素的可見性,例如, $(標準:第一:可見),並適當進行。

再次感謝,並致以最誠摯的問候。

- Chris

0

我的第一個念頭就是,這是切換髮生得如此之快,你甚至都不需要ajaxload.gif可言。所以,如果是這樣的話,那是件好事,對嗎?

我的第二個想法是如何被重新替換爲任何的標題文字是......當這又如何回調發生的ajaxload.gif?

我的第三個想法是,所有事情都發生得非常快,這很好,但是無論如何,你仍然要顯示加載器......如果是這種情況,可以使用.delay(500)或任意數量的時間到你的連鎖店,應該讓它成爲現實。我覺得有更多的代碼涉及到你沒有顯示,你能證明這一點嗎?

這是我快的想法的平均時間去嘗試....

$(function(){ 
    var header = $('#Header'); 
    header.bind('click', function(){ 
     $(this).html('<img src="images/ajaxload.gif">'); 
     $([parentHeaderName=something]).delay(500).toggle(); 
    }); 
}); 

現在,這實際上使燒製之前切換等待,所以,你可能想要把該延遲鏈上的那之前發生更換再次與標題文本ajaxload.gif ....

我希望這有助於某種方式,否則給我更多的信息,我很樂意進一步瞭解。

編輯:

好了,現在我在想它與加載不圖片做的,警報是給這些圖像的時間來加載。因爲這些圖片首先不在頁面上,所以在你加載它們之前頁面沒有提及它們,所以這可能會弄亂你的時間...也許嘗試做一個加載,然後在回調中,設置你的單擊...如果你正在使用jQuery 1.5,如果可以幫助...

$.when($('<img src="images/collapse.gif" />').load(), $('<img src="images/expand.gif" />').load()).then(clickSetUp); 

clickSetUp是你的點擊功能...

試試看吧,生病左右:)

相關問題