Problem:
Jeżeli w codebehind zmienimy właściwość 'Enabled' kontrolki CheckBox na false to w clientcode zmiana właściwości 'disabled' tej kontrolki na true nie działa, dotyczy tyko IE i kontrolki CheckBox (inne kontrolki np. TextBox działają prawidłowo, w FireFox wszystko działa ok),
strona.aspx.cs
//przykladowe kontrolki
CheckBox chbChangeOtherControls;
CheckBox chbTest;
//..
protected override void OnLoad(EventArgs e)
{
if(!Page.IsPostBack)
{
//zaznaczenie tego checkboxa powoduje wlaczenie chbTest
chbChangeOtherControls.Attributes.Add("onclick", "changeItemsState(this);");
//przy wczytaniu strony checkbox jest wylaczony
chbTest.Enabled = false;
}
}
strona.aspx
function changeItemsState(eSelect)
{
var isEnabled = !eSelect.form["ctl00_PlaceHolderMain_chbChangeOtherControls"].checked;
eSelect.form["ctl00_PlaceHolderMain_chbTest"].disabled = isEnabled;
}
Rozwiązanie:
Aby naprawić ten błąd należy dopisać dwie linijki kodu:
function changeItemsState(eSelect)
{
var isEnabled = !eSelect.form["ctl00_PlaceHolderMain_chbChangeOtherControls"].checked;
eSelect.form["ctl00_PlaceHolderMain_chbTest"].removeAttribute('disabled');
eSelect.form["ctl00_PlaceHolderMain_chbTest"].parentElement.removeAttribute('disabled');
eSelect.form["ctl00_PlaceHolderMain_chbTest"].disabled = isEnabled;
}