天天看點

IE6層不能遮擋住下拉框問題解決

在web應用開發中,經常會遇到使用層來顯示資料的情況。而使用IE6來浏覽頁面的時候,彈出來的層無法遮住表單中的下拉框元件,導緻其顯示在層的上面,進而影響顯示效果。解決的辦法是在該層的下面再添加一個層,層的裡面使用iframe填充,這樣顯示的時候就可以擋住下拉框了。(這裡說一下原因:因為IE6中的下拉框元件為頂級元素,是以層無法将其擋住;而iframe卻可以,我們可以利用這個特點來修正顯示bug)

具體的做法如下:

function openNewDiv(_id,msg) {
	  	var m = "mask";
	  	if (docEle(_id)) document.removeChild(docEle(_id));
	  	if (docEle(m)) document.removeChild(docEle(m));

	  	//用于遮蓋select的層開始:s
	  	// 建立層
		var s=document.createElement('DIV');
		s.id = 'forHide';

		// 設定層的相關屬性
		s.style.visibility='';

		// 定義層的樣式
		s.style.position='absolute';
		s.style.left=(parseInt(document.body.scrollWidth) - 300) / 2 - 50 + "px"; // 螢幕居中
		s.style.top='100px';
		s.style.width='300px';
		s.style.height='400px';
		s.style.;
		s.style.backgroundColor='white';

		// 生成iframe
		var L=document.createElement('IFRAME');
		L.name='completionFrame';

		// 定義iframe的樣式,寬高與s相同
		L.width=s.style.width;
		L.height=s.style.height;

		// 附加L到s
		s.appendChild(L);

		// 顯示s
		document.body.appendChild(s);
                    //用于遮蓋select的層結束

                    //新激活資料顯示圖層
		  var newDiv = document.createElement("div");
		  newDiv.id = _id;
		  newDiv.style.position = "absolute";
		  newDiv.style.zIndex = "9999";
		  newDiv.style.width = "300px";
		  newDiv.style.height = "400px";
		  newDiv.style.top = "100px";
		  newDiv.style.left = (parseInt(document.body.scrollWidth) - 300) / 2 - 50+ "px"; // 螢幕居中
		  newDiv.style.background = "#EFEFEF";
		  newDiv.style.border = "1px solid #860001";
		  newDiv.style.padding = "5px";
		  //newDiv.innerHTML = "新激活圖層内容";
		  newDiv.innerHTML = msg;
		  document.body.appendChild(newDiv);
		  // mask圖層
		  var newMask = document.createElement("div");
		  newMask.id = m;
		  newMask.style.position = "absolute";
		  newMask.style.zIndex = "1";
		  newMask.style.width = document.body.scrollWidth + "px";
		  newMask.style.height = document.body.scrollHeight + "px";
		  newMask.style.top = "0px";
		  newMask.style.left = "0px";
		  newMask.style.background = "#000";
		  newMask.style.filter = "alpha(opacity=40)";
		  newMask.style.opacity = "0.40";
		  document.body.appendChild(newMask); 
		  // 關閉mask和新圖層
		  //var newA = document.createElement("a");
		  //newA.href = "#";
		  //newA.innerHTML = "關閉激活層";
		  //newA.innerHTML = "關閉";
		  //newA.onclick = function() {
		  // document.body.removeChild(docEle(_id));
		  // document.body.removeChild(docEle(m));
		  // return false;
		  //}
		  //newDiv.appendChild(newA);
 	}
           

備注:上次寫的時候忘掉了這兩個方法:

[color=red]

var docEle = function() {

return document.getElementById(arguments[0]) || false;

}[/color]

[color=red]function closeDiv() {

document.body.removeChild(docEle('forHide'));

document.body.removeChild(docEle('newDiv'));

document.body.removeChild(docEle('mask'));

//return false;

}[/color]

closeDiv()方法裡的docEle參數根據實際情況自行填寫,反正就是建立的層都要關閉掉。這個辦法的局限性是要確定彈出層必須在下拉框的上面,以使得其可以遮住下拉框。為了達到這個目的,有時不得不變更頁面的顯示(具體就是改變層的位置)。