2012-04-05 105 views
2

我想修改一個Jquery插件來修復這些bug。jQuery後單擊事件

以下是如何將所有關聯在一起的代碼:

$('.' + settings.activeClass).live('click', function(){ 
    select(this); 
    alert($('#pg li.selected').height()); 
    ....... 
}); 

function select(el){ 
hideSelected(function(){ 
    $(el).addClass('selected').removeClass('active'); 
    $(el).animate(settings.selectedCSS, 'slow'); 

}); 
} 

因此,加入「所選的」課前,高約116像素

$(el).addClass('selected').removeClass('active'); 

加入「所選的」下課後,高度應該是大約378px 呈現在html頁面上呈現,高度更新爲378px

alert($('#pg li.selected').height()); 

但是,當我試圖打印高度值時,它仍然在添加'selected'類之前捕獲舊值。

這裏是我加的警告框添加的「選擇」類後打印高度值怪異的一部分,它應該抓住的高度的新的價值,但顯然事實並非如此。

所以,我想到了一個解決方案,也許JQuery有一些點擊事件後的事件?或任何替代解決方案?

+1

的事件處理程序始終_after_的事件觸發執行的所有權利。 – 2012-04-05 18:33:21

回答

1

您的動畫將執行警報的異步。你需要處理什麼是你希望在生命的回調來實現:

所以像:

$('.' + settings.activeClass).live('click', function(){ 
    select(this); 
    // NOT HERE alert($('#pg li.selected').height()); 
    ....... 
}); 

function select(el){ 
    hideSelected(function(){ 
    $(el).addClass('selected').removeClass('active'); 
    $(el).animate(settings.selectedCSS, 'slow', function(){ 
     //here 
     alert($('#pg li.selected').height()); 
    }); 
    }); 
} 

編輯:正如我在評論中提到,你也有傳球的選擇一個布爾參數告訴animate函數來處理異步或同步:

動畫API:

與處理隊列相關的特定文本:

.animate(properties, options) * properties:動畫將移向的CSS屬性的映射。 options傳遞給方法的附加選項的映射。

支持的鍵:

  1. 持續時間:一個字符串或數字決定動畫將運行多久。
  2. easing:一個字符串,指示用於 轉換的緩動函數。
  3. complete:動畫完成後調用的函數。步驟:在動畫的每個步驟之後調用一個 函數。
  4. queue:指示是否將動畫放置在效果 隊列中的布爾值。如果爲false,則動畫將立即開始。從jQuery 1.7開始,隊列選項也可以接受一個字符串,在這種情況下,動畫被添加到由該字符串表示的隊列中。

  5. specialEasing:由 properties參數定義的一個或多個CSS屬性及其對應的緩動函數 (增加1.4)定義的映射。

* - 直接從jquery.com採取文本 - 保留jQuery的

+0

謝謝!從來沒有想過這是動畫異步方法的問題。 – MrCooL 2012-04-06 03:58:45

+1

很高興能幫到你!另一件可能讓你對動畫函數感興趣的事情是,它接受一個參數來「開啓或關閉」異步處理。它通常按照建議執行 - 我將在我的回答帖子中添加該參考文件--Brandt – 2012-04-06 16:01:55