2013-05-10 46 views
2

我一直在嘗試這一段時間,但我不能得到它的工作。 我的問題:我有3個功能(1使一個div更小,1更新div,1放大div),這是由鼠標點擊激活。但它們同時激活,意味着1st(更小的div)由於2nd(更新div)而被跳過。 第二個函數調用php函數重新加載div中的數據。 下面是3個功能:如何在javascript中依次激活3個不同的函數?

function reduceView(Parent){ 
    $(Parent).find('#details').hide("slow", function(){ 
     // Animation complete. 
    }); 
    // get width and Extend 
    $(Parent).find("#" + Parent.ID + "").width("250px"); 
    var width = $(Parent).find("#" + Parent.ID + "").css("width"); 
    $(Parent).animate({ 
     width: width 
    }, 500, function(){ 
     // Animation complete. 
    }); 
} 

function renewWindow(Parent){ 
    $(":animated").promise().done(function(){ 
     PHP.execute(Parent.id + "/home"); 
     $(Parent).find("div[class='Item-list']").remove(); 
     $(Parent).find("div[id='details']").remove(); 
     $(Parent).find("div[id='confirmDialog']").remove(); 
     $(Parent).append(PHP.response); 
     initJquery(); 
     initEvents(); 
    }); 
} 

function enlargeView(Parent){ 
    $(Parent).promise().done(function(){ 
     $(Parent).find('#details').show("slow", function(){ 
      // Animation complete. 
     }); 
     // get width and Extend 
     $(Parent).find("#" + Parent.ID + "").width("683px"); 
     var width = $(Parent).find("#" + Parent.ID + "").css("width"); 
     $(Parent).animate({ 
      width: width 
     }, 500, function(){ 
      // Animation complete. 
     }); 
    }); 
} 

任何線索如何讓這3個爲了工作? 'initJquery'和'initEvents'看到.click之類的東西被重新初始化。 在此先感謝!

Ps。如果我錯過了您可能需要的任何信息,請不要猶豫,問問!

編輯:下面是調用函數

$(".selecter").click(function() { 
    var Element = this; 
    var ID = Element.id; 
    var Parent = $(Element).closest(".drag-div")[0]; 
    reduceView(Parent); 
    renewWindow(Parent); 

    $(":animated").promise().done(function(){ 
     PHP.execute(Parent.id + "/details?" + Parent.id + "id="+ID); 
     $(Parent).find('#details').html(PHP.response); 
     enlargeView(Parent); 
     initJquery(); 
    }); 
    $(Element).addClass("selected"); 
}); 
+1

你可以顯示帖子激活功能的代碼? – Zeebats 2013-05-10 14:04:55

+0

Javascript函數應按您調用它們的順序執行。函數不會同時執行。 – 2013-05-10 14:12:02

+0

你應該在它之前的函數的完成回調中調用下一個連續的函數。 – apsillers 2013-05-10 14:20:35

回答

0

它看起來像你申請多個動畫,然後得到自己想要使用$動畫的承諾的代碼(「:動畫」)選擇。在你的答案中沒有足夠的代碼來運行它,但我的猜測是,renewWindow中的閉包由錯誤的承諾對象觸發 - 可能是頁面上的一個與該功能無關的觸發器。

,請返回你想從第一功能關閉,以KEY,像這樣的承諾對象:

function reduceView(Parent){ 
    var promise = $(Parent).find('#details').hide("slow", function(){ 
     // Animation complete. 
    }).promise(); 
    // get width and Extend 
    $(Parent).find("#" + Parent.ID + "").width("250px"); 
    var width = $(Parent).find("#" + Parent.ID + "").css("width"); 
    $(Parent).animate({ 
     width: width 
    }, 500, function(){ 
     // Animation complete. 
    }); 
    return promise; 
} 

然後,renewWindow可以消耗的諾言:

function renewWindow(Parent, promise){ 
    promise.done(function(){ 
     PHP.execute(Parent.id + "/home"); 
     $(Parent).find("div[class='Item-list']").remove(); 
     $(Parent).find("div[id='details']").remove(); 
     $(Parent).find("div[id='confirmDialog']").remove(); 
     $(Parent).append(PHP.response); 
     initJquery(); 
     initEvents(); 
    }); 
} 

你知道,這種方式你觸發你的功能的承諾是你用來隱藏div的那個。

+0

謝謝!隨着回調和承諾,我已經成功! :d – Sjoerdmans 2013-05-10 14:40:07

相關問題