項目中使用DWZ作為jq架構,因為之前開發的東西都在傳統的webform上,所以使用了大量的iframe,用其openExternal函數實現多Tab.
開發中還好,使用中發現,在ie下,如果一個Tab頁下再開啟一個Tab頁,然後提交後調用closeCurrentTab的方式,結果游標就死活找不回來,只能用Tab鍵才能找回。
然後就開始茫茫的baidu,發現和我一樣用法的人很少,哎,土人,跟不上時代。
終於,被我看到了一個和我一樣用法的人,可惜人家不是用dwz,只是講到這其實是IE的bug。
現象如下:
架構內嵌iframe點擊事件彈出層,彈出層又嵌套iframe,當彈出層iframe裡面input獲得游標後,刪除彈出層(用的是jQuery.remove(),#.parentNode.removeChild(#)也測試不行),架構內嵌iframe的input獲不得焦點了。
解決辦法:
先刪除iframe,再刪除彈出層。
因此,我們要修改dwz.navTab.js的_closeTab方法,然後IE就沒bug了。
_closeTab: function (index, openTabid) { var iOpenIndex = this._indexTabId(openTabid); var $panel = this._getPanels().eq(iOpenIndex); $panel.find("iframe").remove(); CollectGarbage(); this._getTabs().eq(index).remove(); this._getPanels().eq(index).trigger(DWZ.eventType.pageClear).remove(); this._getMoreLi().eq(index).remove(); if (this._currentIndex >= index) this._currentIndex--; if (openTabid) { var openIndex = this._indexTabId(openTabid); if (openIndex > 0) this._currentIndex = openIndex; } this._init(); this._scrollCurrent(); this._reload(this._getTabs().eq(this._currentIndex)); },