2014-03-27 78 views
2

我複製從我的應用場景,這是IE中的錯誤嗎?

HTML:

<input type='text' disabled='true' /> 
<input type='text' disabled='true' /> 
<input type='text' disabled='true' /> 
<input type='text' disabled='true' /> 
<div disabled='true'> 
    <input type='text' disabled='true' /> 
</div> 
<input type='text' disabled='true' /> 
<p id='test'></p> 

我想啓用一個按鈕點擊這些元素,等效JS,

var x = document.querySelectorAll('input[type="text"]'); 
var p = document.querySelector('#test'); 
[].slice.call(x); 

for (var i = 0; i < x.length; i++) { 
    p.innerHTML += x[i].getAttribute("disabled") + " "; 

    x[i].removeAttribute("disabled"); 
} 

廠在所有瀏覽器中都很好, 但是,在IE中,禁用父級的input顯示爲禁用,但不是。

任何解釋爲什麼會發生這種情況?

我知道disabled不是div的有效屬性,但IE應該忽略這樣的屬性?

JSFiddle

+2

我不認爲屬性'disabled =「true」'是可用的div –

+1

您的意思是x = [] .slice.call(x); ?並不是說它會改變循環的行爲,只是當你不分配結果時它不起作用。 – kinakuta

+0

在safari中全部啓用。我不會說這是一個錯誤,因爲div不能禁用屬性 –

回答

3

這並不能斷定這是一個錯誤,但給人多了幾分洞察世事。

http://www.techtamasha.com/the-disabled-attribute-in-internet-explorer/256

那篇文章

直接:

'禁用' 僅屬性適用於按鈕輸入,OPTGROUP,OPTION, SELECT和TEXTAREA標籤和瀏覽器的一般政策是,如果你 使用任何未被授權在標籤中使用的屬性,瀏覽器 忽略它們,但可以使用javascript訪問它們。但在這種情況下IE不是 。如果您在div標籤上應用「禁用」,則IE認真對待 ,並禁用div標記。因此,這意味着我們 不僅對div有任何控制事件,而且還根據「此 屬性被繼承,但本地聲明覆蓋了繼承的 值」。W3C禁用規範中的規則,IE對嵌套元素應用禁用的 屬性在div標籤。所以要小心。