我在嘗試診斷舊網站的問題,而不是我支持的問題。問題是在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";
}
}
}
};