2017-02-05 140 views
0

我希望你能幫助我...我想要做的是什麼,第四個孩子在四年前問的問題是jquery, how to run a function as soon as another function ends 。我知道這個問題早已解決。我在這裏找到了解決方案,經過長時間的研究,我發現如何處理這些問題,現在又遇到了一大堆沮喪,除了再次打開這個話題之外,我無能爲力。所以這裏是我想做的事情:完成另一個功能後執行一個功能

基本上我想定義內容的行爲,當點擊元素(參考框)時,要切換和/或切出內容。我有兩個功能:

1.功能「removeRefContent」

是爲檢查,是否有其他的參考文獻內容,比一個點擊打開,如果是,靠近

function: 'appendRefContent2EndOfLine' 

剛添加單擊的參考框的內容並顯示它。

以下是必要的代碼片斷:

功能displayRefContent(clickedRefID){

// check, if element is opened already  
if ($('div#' + clickedRefID + '_refAdditionalContent').length)) { 
     removeRefContent();   
} else { 

    // check whether other element is opened and close    
    removeRefContent().then(appendRefContent2EndOfLine (clickedRefID)); 

} 

}

//這兩個功能都落後

功能appendRefContent2EndOfLine(requestedRefID){

// get refContent from reference storage container 

var refContent = '<div id="' + requestedRefID + '_refAdditionalContent" class="refAdditionalContent">'; 
    refContent = refContent + $('div#' + requestedRefID + '_additionalContentStorageContainer').html(); 
refContent = refContent + '</div>'; 

// find last refPreviewImage in elements row and store in variable lastElementInRowID   
var lastElementInRowID = 0;  //... some more code to find lastElementInRowID ... 

// add refContent after last element in row and toggle in 

$('div#' + lastElementInRowID + '_ref').after(refContent); 
$('div#' + requestedRefID + '_refAdditionalContent').slideToggle(500); 

}

VAR removeRefContent =函數(){

var removeRefContentDeferred = $.Deferred(); 

$('div.refAdditionalContent').slideToggle(500 , function() {   
    $('div.refAdditionalContent').remove(function() { 
     removeRefContentDeferred.resolve(); 
    });  
});  

return removeRefContentDeferred.promise();  

}

兩個函數做什麼,他們都是爲了。這個問題occuers,當行

removeRefContent()。然後(appendRefContent2EndOfLine(clickedRefID));

被要求。我想首先刪除所有其他引用的內容(通過切換),並且只有當完成並且$('div.refAdditionalContent').remove完成時,纔會執行appendRefContent2EndOfLine的另一個函數。

我讀了很多關於異步和排隊和序列的內容,但根本不明白爲什麼我的解決方案不起作用。結果是,兩個函數在同一時間執行導致衝突。

到目前爲止,我認爲在許多其他解決方案中,我選擇了最優雅的一個。但我很樂意瞭解你的想法...

謝謝你們!

乾杯弗蘭克

+0

我知道這是一個問題就解決了一百倍......我真的我想我明白。但是現在,在無數小時的故障排除之後,再也看不到解決方案,但是......發現了幾種解決方法,但不想申請。 –

回答

0

同樣,更新後的代碼:

功能來控制顯示和隱藏元素含量:

function displayRefContent (clickedRefID) {   
    if ($('div#' + clickedRefID + '_refAdditionalContent').length) { // check, if element is opened already, if yes then close only   
     removeRefContent();   
    } else {       
     if ($('div.refAdditionalContent').length) {  // check whether other element is opened and close first, before open another element      
      removeRefContent().then(appendRefContent2EndOfLine (clickedRefID));      
     } else {    
      appendRefContent2EndOfLine (clickedRefID); // if no other content element is opened, only open element     
     }   
    }    
} 

和兩個函數起初淡出和刪除對象和之後追加並淡入新對象

var removeRefContent = function() {    
    var defRemoveContent = $.Deferred();   
    $('div.refAdditionalContent').slideToggle(500 , function()  
     $('div.refAdditionalContent').remove(); 
     defRemoveContent.resolve(); 
    });        
    return defRemoveContent.promise();  
} 

function appendRefContent2EndOfLine (requestedRefID) {    

    // get refContent from reference storage container (could be more elegant, but not relevant here) 
    var refContent = '<div id="' + requestedRefID + '_refAdditionalContent" class="refAdditionalContent">'; 
     refContent = refContent + $('div#' + requestedRefID + '_additionalContentStorageContainer').html(); 
    refContent = refContent + '</div>'; 

    var lastElementInRowID = ...; // some code to find last refPreviewImage in elements row and store in variable lastElementInRowID 

    // add refContent after last element in row and toggle in  
    $('div#' + lastElementInRowID + '_ref').after(refContent); 
    $('div#' + requestedRefID + '_refAdditionalContent').slideToggle(500);  

} 

問題在displayRefContent的情況下,其中已經打開了內容,需要先關閉內容,然後再打開新內容。它在同一時間完成,所以我不能影響順序和時間(函數removeRefContent完成後函數appendRefContent2EndOfLine)。

感覺像世界上最血腥的初學者,沮喪,沒有更多的想法留下來。也檢查過,如果funcitionality受到其他事物的影響,例如文檔沒有完全加載事實,則內容在document.ready()之後加載。沒有看到任何影響。

謝謝你,希望有人願意幫助 弗蘭克

相關問題