2012-08-13 77 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"之间的区别并不重要。

相关问题