亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

.each()完成后調用jQuery函數

.each()完成后調用jQuery函數

幕布斯6054654 2019-11-25 14:42:06
在jQuery中,調用(或任何其他類型的迭代回調)完成后,可以調用回調或觸發事件。.each()例如,我希望此“淡入淡出”完成$(parentSelect).nextAll().fadeOut(200, function() {    $(this).remove();});在進行一些計算之前,在。之后插入新元素$(parentSelect)。如果現有元素仍然對jQuery可見,并且睡眠/延遲一些任意時間(每個元素200個)似乎最好是一種脆弱的解決方案,那么我的計算是不正確的。我可以輕松地.bind()為事件回調提供必要的邏輯,但是我不確定.trigger()在上述迭代完成之后如何干凈地調用。顯然,我無法在迭代內調用觸發器,因為它將觸發多次。在的情況下$.each(),我曾考慮過在data參數的末尾添加一些內容(我會在迭代主體中手動查找),但我不想被迫這樣做,所以我希望還有其他一些優雅之處控制有關迭代回調的流程的方法。
查看完整描述

3 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

var elems = $(parentSelect).nextAll(), count = elems.length;


elems.each( function(i) {

  $(this).fadeOut(200, function() { 

    $(this).remove(); 

    if (!--count) doMyThing();

  });

});

請注意,.each()它本身是同步的 -調用.each()之后的語句僅在.each()調用完成后才執行。但是,在迭代中開始的異步操作.each()當然會以自己的方式繼續。這就是這里的問題:淡化元素的調用是由計時器驅動的動畫,并且這些動畫以自己的速度繼續進行。


因此,上面的解決方案可以跟蹤淡出了多少個元素。每次調用.fadeOut()都會獲取完成回調。當回調函數注意到所有涉及的原始元素都已計入回調時,可以放心地采取所有后續操作,以確保所有衰落都已完成。


這是一個有四年歷史的答案(目前為2014年)。一種現代的方法可能涉及使用Deferred / Promise機制,盡管以上內容很簡單,并且應該可以正常工作。


查看完整回答
反對 回復 2019-11-25
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

可能要晚了,但我認為這段代碼行得通...


$blocks.each(function(i, elm) {

 $(elm).fadeOut(200, function() {

  $(elm).remove();

 });

}).promise().done( function(){ alert("All was done"); } );


查看完整回答
反對 回復 2019-11-25
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

JavaScript是同步運行的,因此您放置的任何內容each()都不會運行,直到each()完成。


考慮以下測試:


var count = 0;

var array = [];


// populate an array with 1,000,000 entries

for(var i = 0; i < 1000000; i++) {

    array.push(i);

}


// use each to iterate over the array, incrementing count each time

$.each(array, function() {

    count++

});


// the alert won't get called until the 'each' is done

//      as evidenced by the value of count

alert(count);

調用警報時,計數將等于1000000,因為直到each()完成警報才會運行。


查看完整回答
反對 回復 2019-11-25
  • 3 回答
  • 0 關注
  • 938 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號