JavaScript disabled = true vs ASP.NET Enabled = False
在我的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=""
可能引起我任何问题之间的区别?
的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
这样的属性在所有浏览器中都不起作用。
被禁用的属性不必具有固定值 - 它以前没有使用任何值(例如<input type=text disabled>
),但是这导致了一些验证问题。如果你已经在你的项目中使用jQuery,您可以使用类似:
$('#elementname').removeAttr('disabled').removeClass('aspNetDisabled'); // Enable
和
$('#elementname').attr('disabled').addClass('aspNetDisabled'); // Disable
disabled="disabled"
和disabled="true"
之间的区别并不重要。