2012-08-13 76 views
1

在我的ASP.NET Web應用程序中,我有一些可能在代碼隱藏中禁用的元素,並且可能會在JavaScript中禁用某些元素。JavaScript disabled = true vs ASP.NET Enabled = False

對於代碼隱藏的元素,我只需使用下面的VB.NET屬性:

Me.element1.Enabled = False 

對於動態的元素,我用下面的JavaScript屬性:

document.getElementById('" & Me.element2.ClientID & "').disabled = true; 

的第一件事我注意到,更改Enabled屬性不僅僅將disabled="disabled"添加到標記中,還將button(我按鈕的皮膚類名)的類更改爲button aspNetDisabled。爲了彌補這一點,我有以下額外的JavaScript行:

document.getElementById('" & Me.element2.ClientID & "').className = 'button aspNetDisabled'; 

(顯然,這意味着我需要保持className屬性,如果/當我再次啓用該元素,我需要確保我用button/textbox /等適用 - 對於加分,如果你對此有任何建議,我會很高興聽到他們的聲音)

但是,我也注意到,通過JavaScript產生的標記是唯一disabled="",而ASP.NET Enabled屬性更改生成的標記爲disabled="disabled"

我嘗試使用JavaScript順藤摸瓜將其更改爲:

document.getElementById('" & Me.element2.ClientID & "').disabled = 'disabled'; 

然而,這似乎並沒有發揮作用,使用屬性仍是空的。有趣的是,disabled=true;disabled='disabled';似乎以同樣的方式工作 - 我期望其中一個更正確(我堅持到=true;現在)。

對於啓用和禁用元素,有沒有一種推薦的最佳方式可以實現JavaScript和服務器端ASP.NET的相同結果?

和...

disabled="disabled"渲染和disabled=""可能引起我任何問題之間的區別?

回答

1

disabled屬性的值並不重要,它是暗示http://www.w3.org/TR/html401/interact/forms.html#h-17.12.1

有一些陌生感,雖然事情。

var my_elem = document.getElementById('my_elem'); 
elem.disabled = true; // disabled 
elem.disabled = false; // enabled 
elem.disabled = "false"; // disabled 

奇怪的情況是

elem.disabled = ""; // disabled 

通常""falsy(如在"" == falsetrue)。

我建議你使用框架來設置這些屬性來捕捉任何瀏覽器的特定行爲。對於disabled沒有太多爭執,但像opacity這樣的屬性在所有瀏覽器中都不起作用。

0

被禁用的屬性不必具有固定值 - 它以前沒有使用任何值(例如<input type=text disabled>),但是這導致了一些驗證問題。如果你已經在你的項目中使用jQuery,您可以使用類似:

$('#elementname').removeAttr('disabled').removeClass('aspNetDisabled'); // Enable 

$('#elementname').attr('disabled').addClass('aspNetDisabled'); // Disable 

disabled="disabled"disabled="true"之間的區別並不重要。

相關問題