JavaScript disabled = true vs ASP.NET Enabled = False

时间:2012-08-13 09:46:17

标签: javascript asp.net markup

在我的ASP.NET Web应用程序中,我有一些可能在代码隐藏中被禁用的元素,并且可能会在JavaScript中禁用某些元素。

对于代码隐藏元素,我只使用以下VB.NET属性:

Me.element1.Enabled = False

对于动态元素,我使用以下JavaScript属性:

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

我注意到的第一件事是更改Enabled属性不只是将disabled="disabled"添加到标记,它还将类从button(我的按钮的蒙皮类名称)更改为{{ 1}}。为了弥补这一点,我添加了以下额外的JavaScript行:

button aspNetDisabled

(显然,这意味着如果/当我再次启用该元素时,我需要维护className属性,并且我需要确保使用document.getElementById('" & Me.element2.ClientID & "').className = 'button aspNetDisabled'; / button / etc。对于奖励积分,如果您对此有任何建议,我会很高兴听到他们的说法)

但是,我还注意到通过JavaScript生成的标记仅为textbox,而由ASP.NET Enabled属性更改生成的标记为disabled=""

我试图摆弄JavaScript以将其更改为:

disabled="disabled"

然而,这似乎没有什么区别,属性仍然是空的。有趣的是,document.getElementById('" & Me.element2.ClientID & "').disabled = 'disabled'; disabled=true;似乎以同样的方式运作 - 我希望其中一个更正确(我现在坚持disabled='disabled';)。

在启用和禁用元素方面,是否建议使用JavaScript获得与服务器端ASP.NET相同结果的最佳方法?

和...

=true;disabled="disabled"的呈现之间的差异是否可能导致我出现任何问题?

2 个答案:

答案 0 :(得分: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 (如"" == false中的true)。

我建议您使用框架来设置这些属性以捕获任何特定于浏览器的行为。对于disabled,没有太多冲突,但像opacity这样的属性在所有浏览器中都不起作用。

答案 1 :(得分:0)

disabled属性不必具有固定值 - 它曾经在没有任何值的情况下工作(例如<input type=text disabled>),但这会导致一些验证问题。如果您已在项目中使用jquery,则可以使用以下内容:

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

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

disabled="disabled"disabled="true"之间的差异并不重要。