J'essaie de diagnostiquer un problème avec un site plus ancien que celui que je supporte. Le problème est que dans IE8, une balise SELECT est cachée. Il s'avère que c'est dû à une ancienne version d'un calendar.js qui applique le style visibility:hidden
non seulement à SELECT Tags, mais aussi aux applets et aux iframes.Pourquoi ces javascripts de calendrier masquent les tags select, applet et iframe pour IE?
Je suis rouillé sur mon javascript et les détails des anciens problèmes de navigateur, mais la chose que je trouve étrange, c'est qu'il cache ces balises lorsqu'elles ne sont pas liées au calendrier. Dans la page avec le problème, cette balise de sélection qui est cachée est dans un div au-dessus des objets de calendrier, bien qu'ils soient dans la même forme.
Est-ce un problème avec une version antérieure de IE? Serait-il «sûr» de mettre un if pour vérifier la version de IE, et ne pas appliquer ces styles pour la version 8 et plus tard?
est ici la fonction de 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";
}
}
}
};