почему javascript "checkbox.disable" не отображает связанную метку в ASP.NET? - PullRequest
3 голосов
/ 14 марта 2012

Я использую некоторый JavaScript, чтобы отключить флажки в списке флажков, например:

        var objItem = document.getElementById("<%= resCBL.ClientID %>");
        var checkBoxes = objItem.getElementsByTagName("input");

        if (form1.secTB.value == 0) {
            checkBoxes[0].disabled = true;

Этот код работает нормально, но когда страница отображается в IE, атрибут текста для флажка отображается какметка, и поэтому только флажок кажется серым, а не флажок И текст.

Если я просто установлю

Enabled = false

в коде .aspx, это затеняет все, но делает невозможным (с моим текущим методом) повторное включение CB и не серый

Может кто-нибудь сказать мне, как обойти это и помочь мне понять, почему он это делает?

Ответы [ 2 ]

4 голосов
/ 14 марта 2012

Добавьте отключенный атрибут к InputAttributes вместо CheckBox вместо:

CheckBox1.InputAttributes.Add("disabled", "disabled");

http://geekswithblogs.net/jonasb/archive/2006/07/27/86498.aspx

Проблема в том, что <asp:checkbox /> элемент управления отображается следующим образом:

<span><input type='checkbox'></span>

Настоящая проблема возникает, когда у вас есть флажок, подобный этому: <asp:CheckBox Enabled="false"/>.

Это выглядит так:

<span disabled='disabled'><input type='checkbox' disabled='disabled'></span>
2 голосов
/ 14 марта 2012

Если вы посмотрите на вывод HTML из элемента управления флажка, то увидите, что есть связанный <label for="checkbox_client_id">Text</label> - поэтому установка флажка как отключенного не затеняет текст.

Когдапросматривая страницу из IE, ASP.NET переносит <input> и связанный <label> с <span disabled="disabled">.IE отключит все элементы внутри диапазона, поэтому он отключил флажок и метку.

Однако, поскольку диапазон не является элементом формы, большинство других браузеров следуют правилам W3C иигнорируйте атрибут «disabled».Отключение интервала вокруг флажка будет работать только в IE.

Самое простое решение, о котором я могу подумать, - повторить это поведение вручную.Оберните флажок диапазоном, а затем, при включении / отключении флажка, используйте CSS для стилизации диапазона и получения желаемого эффекта для работы во всех браузерах.

var objItem = document.getElementById("<%= resCBL.ClientID %>");
var checkBoxes = objItem.getElementsByTagName("input");

if (form1.secTB.value == 0) {
    checkBoxes[0].disabled = true;
    checkBoxes[0].parentNode.class = "disabled";
}

PS Извините, если я звучу странно - IE всегда раздражаетменя с его бесконечными "тонкостями"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...