2008-10-22 14 views
15

嗯,我不知道是否有人遇到過這個問題
簡要說明是IE6任何<select>對象將會被顯示在任何其他項目,甚至div的.. 。這意味着如果你有一個奇特的JavaScript效果,顯示一個應該在所有東西之上的div(例如:lightbox,multibox等)。onclick某個元素,並且div重疊<select>你的div得到顯示,如果它的下<select> [在這種情況下,最大和最小的z-index不起作用]iframe中勻場或IE6(及以下)選擇的z-index錯誤

我試着用搜索引擎,找到了iframe的墊片的解決方案
但我想一些漂亮清潔替代品 或更好,但有人找到了更好的解決方案? 因爲使用iframe的方法使用大約130mb的內存可能會減慢窮人的機器

+0

我以前有過這個問題。我使用自己的代碼,但我已經試過任何燈箱(jQuery等)。 – 2008-10-22 05:57:50

+0

下投票接受 \t 以及我們只是檢查了我們的谷歌分析,結果發現,我們的訪問者的30%的人使用IE6所以我不可能剛落出來那麼容易 okei下你的意見,我決定去與IE的優雅降級使用刪除可能會被任何popping divs重疊的項目的方法 – lock 2011-03-09 07:25:21

+0

hehe這個問題只存在於IE6中,而且總是低於hmmm呀,但是當iframe變得可見時瀏覽器從任務管理器的進程中檢查到它會佔用50MB 反正我發現尋找替代品的另一個原因是這個iframe shim不能與通過DOM動態生成的div一起工作傷心,我認爲沒有人真的困擾 – lock 2011-03-09 07:25:42

回答

8

您不必使用循環來隱藏每個select。所有你需要的是一個CSS規則,如:

* html .hideSelects select { visibility: hidden; } 

而且下面的JavaScript:

//hide: 
document.body.className +=' hideSelects' 

//show: 
document.body.className = document.body.className.replace(' hideSelects', ''); 

(或者,您可以使用自己喜歡的addClass/removeClass實現)。

1

在IE7之前,下拉列表是一個「窗口」控件,意思是它直接通過Windows呈現爲控件,而不是瀏覽器合成它。因此,它不可能支持其他合成控件的z索引。

爲了出現在DDL上,您必須使用另一個窗口控件,如IFRAME。您也可以使用一個名爲window.createPopup()的基本IE瀏覽器功能,它實質上是一個無鉻彈出窗口。它有一些限制,比如不可阻擋的點擊,但是如果你正在構建一個懸停菜單系統,它們實際上會有所幫助。

+0

我認爲這是Windows XP SP2 th在添加了一個名爲「允許腳本啓動的窗口沒有大小或位置約束」的額外安全功能。這在所有IE區域中默認設置爲禁用。這會導致您失去對createPopup窗口的控制權。強烈建議不要使用此功能。我認爲IE團隊增加了這個功能,因爲釣魚網站正在使用createPopup窗口來隱藏真實的地址欄。 – einarq 2010-07-13 14:16:47

3

jquery有一個名爲bgiframe的插件,它使iframe方法很容易實現。

就個人而言,作爲一名Web開發人員,我已經到了不再關心IE6用戶體驗的地步。我會盡可能使其儘可能接近「正確」,並確保它的功能性,但只要速度太慢,太糟糕了。他們可以升級。 IE7(儘管仍然相當緩慢,與其他瀏覽器相比)已經出現了2年(幾乎到了一天!)。 IE8很快就會出來。 Firefox適用於每個平臺。 Safari也是一個選項(並且速度超快)。 Opera可用於大多數/每個平臺。

IE6在7年前發佈。恕我直言,沒有理由繼續使用它,除了懶惰的用戶和無能的IT部門(或者如果你是一個Web開發人員)。

0

還有我正在開始探索的activex方法。它需要創建條件代碼來使用activex控件而不是ie6的選擇框。有一個demo script顯示技術,這是discussed in more detail here

更新:似乎需要MS Office才能使active-x控件位於用戶的機器上。從理論上講,有可能將某個地方包括在內,但這會變得更加混亂。

2

如果有人有興趣,這裏是一些IE勻場碼。

* html .shimmed { 
    _azimuth: expression(
     this.shimmed = this.shimmed || 'shimmed:'+this.insertAdjacentHTML('beforeBegin','<iframe style="filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0);position:absolute;top:0px;left:0px;width:100%;height:100%" frameBorder=0 scrolling=no src="javascript:false;document.write('+"''"+');"></iframe>'), 
     'inherit'); 
} 

裁判:http://docs.jquery.com/Plugins/bgiframe使用jQuery:this gist通過subtleGradientpost by Zach Leatherman

1

到惱人的IE瀏覽器漏洞的最簡單,最優雅的解決方案是在發現。

在嘗試2天后,我得出了這個結論,使其能夠與所有動態的WebSphere Portal/Portal應用程序一起工作,包括飛越菜單。

0

我知道很多人建議他們自己的提示,但在我的情況下,我只是簡單地隱藏選擇使用jQuery像下面。

$(':date').dateinput({ 
    format: 'dd/mm/yyyy', 
    onBeforeShow: function(event) { 
     $('select').hide(); 
    }, 
    onHide: function(event) { 
     $('select').show(); 
    } 
});