poniedziałek, 30 czerwca 2008

Problem ze zmianą stanu CheckBox w IE




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;
}

Brak komentarzy:

Prześlij komentarz