1

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

对于代码隐藏元素,我只需使用以下 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/etc。如果适用 - 对于奖励积分,如果您对此有任何建议,我会很高兴听到他们)

但是,我也注意到通过 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=""可能给我带来什么问题吗?

4

2 回答 2

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

通常""的(如"" == falseis true)。

我建议您使用框架来设置这些属性以捕获任何浏览器特定的行为。因为disabled没有太多的冲突,但是像opacity这样的属性在所有浏览器中的工作方式并不相同。

于 2012-08-13T09:58:34.443 回答
0

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

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

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

disabled="disabled"和之间的区别disabled="true"并不重要。

于 2012-08-13T09:53:54.687 回答