0

我在嘗試診斷舊網站的問題,而不是我支持的問題。問題是在IE8中,SELECT標籤被隱藏。事實證明,這是由於舊版本的calendar.js,它將visibility:hidden樣式應用於不僅包括SELECT標籤,還包括小應用程序和iframe。爲什麼這些日曆javascripts隱藏IE的select,applet和iframe標籤?

我在我的javascript和老的瀏覽器怪癖的細節生鏽,但我覺得奇怪的是,它是隱藏這些標籤時,他們是無關的日曆。在帶有問題的頁面中,隱藏的選擇標籤位於日曆對象上方的div中,儘管它們的格式相同。

這是早期版本IE的問題嗎?如果要檢查IE的版本,是否安全?並且在版本8和更高版本中不應用這些樣式?

下面是從calendar.js功能:

Calendar.prototype.hideShowCovered = function() { 
    if (!Calendar.is_ie && !Calendar.is_opera) 
    return; 
    function getVisib(obj){ 
    var value = obj.style.visibility; 
    if (!value) { 
     if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C 
     if (!Calendar.is_khtml) 
      value = document.defaultView. 
      getComputedStyle(obj, "").getPropertyValue("visibility"); 
     else 
      value = ''; 
     } else if (obj.currentStyle) { // IE 
     value = obj.currentStyle.visibility; 
     } else 
     value = ''; 
    } 
    return value; 
    }; 

    var tags = new Array("applet", "iframe", "select"); 
    var el = this.element; 

    var p = Calendar.getAbsolutePos(el); 
    var EX1 = p.x; 
    var EX2 = el.offsetWidth + EX1; 
    var EY1 = p.y; 
    var EY2 = el.offsetHeight + EY1; 

    for (var k = tags.length; k > 0;) { 
    var ar = document.getElementsByTagName(tags[--k]); 
    var cc = null; 

    for (var i = ar.length; i > 0;) { 
     cc = ar[--i]; 

     p = Calendar.getAbsolutePos(cc); 
     var CX1 = p.x; 
     var CX2 = cc.offsetWidth + CX1; 
     var CY1 = p.y; 
     var CY2 = cc.offsetHeight + CY1; 

     if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) { 
     if (!cc.__msh_save_visibility) { 
      cc.__msh_save_visibility = getVisib(cc); 
     } 
     cc.style.visibility = cc.__msh_save_visibility; 
     } else { 
     if (!cc.__msh_save_visibility) { 
      cc.__msh_save_visibility = getVisib(cc); 
     } 
     cc.style.visibility = "hidden"; 
     } 
    } 
    } 
}; 

回答

4

這些對象/總是在Z順序的頂部,這意味着它們將顯示在日曆上的頂部,如果它試圖出現在他們頂部。

它在任何現代瀏覽器中都不再是select,並且(您需要測試它但是)我懷疑iframe也是如此。他們當然在IE8中沒有這個問題。

applet另一方面,幾乎可以肯定仍然有問題,是一個嵌入頁面的重量級窗口。 Flash在重量級窗口模式下也會有同樣的問題。