2013-03-11 38 views
3

我試圖創建一個彈出消息,直到您確認它纔會禁用屏幕的其餘部分,僅通過使用CSS和JavaScript(並且沒有alert函數)。用IE兼容腳本代替setAttribute

儘管http://msdn.microsoft.com/en-us/library/ie/ms536739%28v=vs.85%29.aspx聲明setAttribute在IE8及更高版本中受支持,但似乎並不正確 - 呃,實際上它似乎根本不起作用。

這裏是我的代碼:

<html> 

<style type="text/css"> 

.overlay 
{ 
position: absolute; 
left: 0px; 
top: 0px; 
width: 100%; 
height: 100%; 
background-color: rgba(0,0,0,0.2); 
} 

.overlaytext 
{ 
position: absolute; 
left: 50%; 
margin-left: -150px; 
top: 50%; 
margin-top: -50px; 
width: 300px; 
height: 100px; 
padding-top: 5px; 
background-color: #777777; 
color: #000000; 
font-size: 20px; 
text-align: center; 
} 

.overlaybutton 
{ 
position: absolute; 
left: 50%; 
margin-left: -30px; 
top: 50%; 
margin-top: 20px; 
width: 60px; 
height: 25px; 
border: solid; 
border-color: #000000; 
border-width: 1px; 
background-color: #999999; 
color: #000000; 
font-size: 20px; 
} 

</style> 

<script type="text/javascript"> 

function showoverlay(message) 
{ 
var overlay = document.createElement('div'); 
overlay.setAttribute('id','overlay'); 
overlay.setAttribute('class','overlay'); 
document.body.appendChild(overlay); 

var overlaytext = document.createElement('div'); 
overlaytext.setAttribute('id','overlaytext'); 
overlaytext.setAttribute('class','overlaytext'); 
overlaytext.innerHTML = message; 
document.body.appendChild(overlaytext); 

var overlaybutton = document.createElement('input'); 
overlaybutton.setAttribute('type','button'); 
overlaybutton.setAttribute('id','overlaybutton'); 
overlaybutton.setAttribute('class','overlaybutton'); 
overlaybutton.setAttribute('value','OK'); 
overlaybutton.setAttribute('onclick','deleteoverlay()'); 
document.body.appendChild(overlaybutton); 
} 

function deleteoverlay() 
{ 
var elem = document.getElementById('overlay'); 
elem.parentNode.removeChild(elem); 
elem = document.getElementById('overlaytext'); 
elem.parentNode.removeChild(elem); 
elem = document.getElementById('overlaybutton'); 
elem.parentNode.removeChild(elem); 
} 

</script> 

<body> 

<input type="button" value="Show message" onclick="showoverlay('Message text')"/> 

</body> 
</html> 

它工作得很好,在Firefox和Chrome,但IE(與IE9測試)似乎忽視了setAttribute方法,因爲它只有在文字和按鈕放,但沒有格式化(例如class未應用),並且單擊新創建的按鈕不會刪除對象(即未應用id或與刪除對象的代碼的某些部分不兼容)。

我試圖取代setAttribute這樣的:

<script type="text/javascript"> 

function showoverlay(message) 
{ 
var overlay = document.createElement('div'); 
overlay.id = 'overlay'; 
overlay.class = 'overlay'; 
document.body.appendChild(overlay); 

var overlaytext = document.createElement('div'); 
overlaytext.id = 'overlaytext'; 
overlaytext.class = 'overlaytext'; 
overlaytext.innerHTML = message; 
document.body.appendChild(overlaytext); 

var overlaybutton = document.createElement('input'); 
overlaybutton.type = 'button'; 
overlaybutton.id = 'overlaybutton'; 
overlaybutton.class = 'overlaybutton'; 
overlaybutton.value = 'OK'; 
overlaybutton.onclick = 'deleteoverlay()'; 
document.body.appendChild(overlaybutton); 
} 

function deleteoverlay() 
{ 
var elem = document.getElementById('overlay'); 
elem.parentNode.removeChild(elem); 
elem = document.getElementById('overlaytext'); 
elem.parentNode.removeChild(elem); 
elem = document.getElementById('overlaybutton'); 
elem.parentNode.removeChild(elem); 
} 

</script> 

但是這一次,它甚至不添加文本和按鈕。

那麼,如何使這個腳本IE兼容,既顯示所有的元素,然後刪除它們?

感謝

+0

改爲使用jQuery。 – Matthew 2013-03-11 00:07:43

回答

6

使用此爲您的文檔類型

<!DOCTYPE html> 

,然後把這個文檔的頭部

<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 

然後享受使用setAttribute和許多其他功能,這將允許在IE8 +環境中正常工作。

+1

謝謝,現在我不必爲IE和其他瀏覽器維護兩個單獨的代碼。 – kaboom1 2013-03-11 00:55:38

1

我遇到了這個問題爲好。如果您可以在網站上包含jQuery,則可以使用$('#overlay').attr('class', 'overlay');。 jQuery對於製作跨瀏覽器兼容的代碼非常有用。

+0

我對jQuery並不熟悉。但是,如果這是唯一的選擇,我將不得不看看它。 – kaboom1 2013-03-11 00:20:04

+0

如果可以用jQuery完成,可以在沒有jQuery的情況下完成。 – 2015-11-13 21:51:10

5

設置一類在你的第二個例子正確的方法是:

overlaybutton.className = 'overlaybutton'; 

這將讓工作在IE類。至於刪除元素推移,我會建議重新格式化事件處理附件像這樣:

overlaybutton.onclick = deleteoverlay; 
+0

這個絕招!現在消息窗口正確顯示並且在點擊按鈕後也消失。有一件事仍然存在 - 第一個div(它應該覆蓋透明的黑色區域的原始內容)不會出現在IE中,你知道爲什麼嗎? – kaboom1 2013-03-11 00:33:23

+0

@Imortenson沒關係,找到它。這是由於 background-color:rgba(0,0,0,0。2);我使用 background-color:#000000; 不透明度:0.2; filter:alpha(opacity = 20); 現在一切正常。 – kaboom1 2013-03-11 00:39:42