作了一個錯誤提示框的功能,提示框沒法主動關閉,要求提示框出現5秒後自動消失;很天然的想到了用setTimeout來實現該功能,實現代碼:javascript
el.fadeIn(500);//淡入效果 setTimeout(function(){ msgPanel("hiden",id);//隱藏提示框 },5000);
可是問題很快出現了,當連續提交的時候,提示框有時候會出現後很快就消失,沒有達到想要的效果,這裏從js的運行機制提及,js是單線程執行,先按順序執行完主體代碼,遇到setTimeout、鼠標點擊等事件時,加入異步隊列,主體代碼執行完後開始執行隊列中的代碼,上面的代碼在短期內屢次顯示提示框時,會出現以前的隱藏代碼隱藏最後出現的提示框,這裏但願的效果是隻隱藏最後一次出現的提示框。加入以下機制:java
在顯示提示框的時候,獲取當前時間戳,給提示框加上一個自定義屬性,代碼以下:異步
var index = new Date().getTime(); el.attr("index",index);
隱藏提示框的時候,判斷要隱藏的提示框是否爲當前顯示的提示框:ide
el.fadeIn(500);//淡入效果 setTimeout(function(){ var tempIndex = $("#" + id).attr("index"); if(index == tempIndex){ msgPanel("hiden",id);//隱藏提示框 } },5000);
這樣就能達到想要的效果了。線程