Input Appearance Is Not Updated When Disabled In Internet Explorer
This help article describes an appearance issue with decorated inputs by RadFormDecorator when disabled with JavaScript in Internet Explorer and offers a resolution to it.
Problem:
The appearance of decorated enabled inputs of type "checkbox", "button" and "radio" is not updated when they are disabled with JavaScript in Internet Explorer 10 and below. This issue is reproducible with the code from Example 1.
<script type="text/javascript">
function disableInputs() {
var inputCheckBox = $get("<%=myInputCheckBox1.ClientID%>");
var inputRadio = $get("<%=myInputRadio1.ClientID%>");
var inputButton = $get("<%=myInputButton1.ClientID%>");
inputCheckBox.disabled = true;
inputRadio.disabled = true;
inputButton.disabled = true;
}
</script>
<telerik:RadFormDecorator ID="RadFormDecorator1" runat="server" DecoratedControls="All" />
<telerik:RadButton ID="RadButton1" runat="server" AutoPostBack="false" OnClientClicked="disableInputs" Text="Disable Inputs" />
<input type="checkbox" id="myInputCheckBox1" runat="server" name="name1" value="value1" checked="checked" />
<input type="radio" id="myInputRadio1" runat="server" name="name2" value="value2" />
<input type="button" id="myInputButton1" runat="server" name="name3" value="value3" />
Cause:
Internet Explorer 10 and below have an issue with tracking the disabled property of DOM elements when an enabled element is disabled. This is a bug in Internet Explorer and there is no workaround about it.
Solution:
There are two ways to workaround this browser limitation:
-
Skip the checkbox, button and radio button elements from decoration by setting the ControlsToSkip property of the RadFormDecorator to "CheckBoxes,Buttons,RadioButtons".
ASP.NET
<telerik:RadFormDecorator ID="RadFormDecorator1" runat="server" DecoratedControls="All" ControlsToSkip="CheckBoxes,Buttons,RadioButtons" />
-
Set the CSS classes RadFormDecorator uses for the disabled inputs appearance manually. RadFormDecorator will remove them when needed (e.g., if inputs are enabled their appearance will be updated too).
JavaScript
<script type="text/javascript"> function disableInputs() { var inputCheckBox = $get("<%=myInputCheckBox2.ClientID%>"); var inputRadio = $get("<%=myInputRadio2.ClientID%>"); var inputButton = $get("<%=myInputButton2.ClientID%>"); //If the browser is IE manually set the css classes for the disabled state of inputs if ($telerik.isIE) { setDisabledCssClassToDecoratedElement(inputCheckBox, 'rfdInputDisabled'); setDisabledCssClassToDecoratedElement(inputRadio, 'rfdInputDisabled'); setDisabledCssClassToDecoratedElement(inputButton, 'rfdInputDisabled'); } inputCheckBox.disabled = true; inputRadio.disabled = true; inputButton.disabled = true; } function setDisabledCssClassToDecoratedElement(element, disabledCssClass) { var decoratedElement = Telerik.Web.UI.RadFormDecorator.getDecoratedElement(element); Sys.UI.DomElement.addCssClass(decoratedElement, disabledCssClass); } </script>
ASP.NET
<telerik:RadFormDecorator ID="RadFormDecorator1" runat="server" DecoratedControls="All" RenderMode="Classic" /> <telerik:RadButton ID="RadButton2" runat="server" AutoPostBack="false" OnClientClicked="disableInputs" Text="Disable Inputs" /> <input type="checkbox" id="myInputCheckBox2" runat="server" name="name1" value="value1" checked="checked" /> <input type="radio" id="myInputRadio2" runat="server" name="name2" value="value2" /> <input type="button" id="myInputButton2" runat="server" name="name3" value="value3" />