在我的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"
的呈现之间的差异是否可能导致我出现任何问题?
答案 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"
之间的差异并不重要。