Я пытаюсь диагностировать проблему с более старым сайтом, чем я поддерживаю.Проблема в том, что в IE8 тег SELECT скрыт.Оказывается, это связано с более старой версией calendar.js, в которой стиль visibility:hidden
применяется не только к тегам SELECT, но также к апплетам и фреймам.
Я не справился со своим javascript и сведениями о старых причудах браузера, но странная вещь, которую я нахожу, заключается в том, что они скрывают эти теги, когда они не связаны с календарем.На странице с проблемой этот скрытый тег выбора находится в элементе div над объектами календаря, хотя они имеют одинаковую форму.
Это проблема с более ранней версией IE?Было бы «безопасно» вставить if, чтобы проверить версию 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";
}
}
}
};