我在使用bootstrap3.0時,用了他的modal 功能打開一個模態框時,在關閉modal時,bootstrap沒有清除它打開的樣式,有餘留樣式,造成我的頁面的滾動條消失了(打開modal前是有滾動條的),代碼如下:
....省略部分代碼
$("#setRatioModal").modal("hide");
showRation();//保存後,關閉modal後重新加載部分頁面(包括modal的html)
....省略部分代碼
打開前Dom如下:
關閉modal,並重新加載html後,Modal沒有正常關閉,有殘餘樣式和dom結構,如下:
後來詢問前端的同事才知道,js雖然單線程往下執行,但當遇到樣式渲染、dom操作時,就有同步異步的問題,也就是說,當$("#setRatioModal").modal("hide");執行完,但有可能modal('hide')裏面的樣式操作,dom操作還沒有渲染完,showRation()方法就把頁面刷新了或者加入了新的html,頁面重新渲染,而modal可能還沒有執行完樣式刪除,modal有樣式殘餘,就出現了這個問題。
解決辦法:
1.手動清除殘餘(這個有點土)
$(".modal-backdrop").remove();
$("body").removeClass('modal-open');
2.使用setTimeout函數調用後面的刷新代碼
$("#setRatioModal").modal("hide");
setTimeout(function(){//延時加載頁面
showRation();
},500);