Як змінити колір вимкнених елементів керування html в IE8 за допомогою css


74

Я намагаюся змінити колір елементів керування введенням, коли вони вимкнені за допомогою наступного css.

input[disabled='disabled']{
  color: #666;     
}

Це працює в більшості браузерів, але не в IE. Я можу змінити будь-які інші властивості стилю, такі як колір фону, колір межі тощо ... тільки не колір. Хто-небудь може це пояснити?


2
# 666; змусив мене трохи хихикати :)
Кімі

1
Це не було призначено, це просто хороший сірий колір для відключених елементів керування.
Сет Ріно,

Дивіться цей коментар stackoverflow.com/a/5486152/2906042 Мені це допомогло)
Аксана Толстогузова

Відповіді:


123

На жаль, якщо ви використовуєте атрибут disabled, незалежно від того, що ви намагаєтесь, IE просто встановить колір тексту за замовчуванням у сірий, з дивною білою тінню ... штука ... все ж усі інші стилі все одно будуть працювати. : - /


1
Так, але чому? Чи використовується якийсь нестандартний стиль фільтру за кадром чи щось інше?
Сет Ріно,

68
Я майже проголосував цю відповідь, але зупинився. Я збирався це зробити, бо ненавидів відповідь; не тому, що відповідь була неправильною. Голосування: p
Стівен Соренсен

Я думаю, що це підпадає під ту саму категорію, що і "Дружні сторінки помилок", M $ просто намагається допомогти
guzart

2
Незважаючи на те, що ця відповідь є "правильною", я вважаю, що було б корисно її вікі-ізи та посилання на інші запитання щодо SO, які корисні для документування наявних варіантів, щоб зменшити ситуацію. наприклад, примусити колір фону до білого, щоб зробити речі більш читабельними, використовуючи JS для переходу на лише для читання + примусове розмиття onFocus, JS для відображення div замість введення
Snekse

вже 4 роки, чи було зроблено якесь покращення?
Venzentx

16

У мене була така сама проблема для <select>елементів в IE10 і я знайшов рішення, яке працює лише для вибраних елементів:

http://jsbin.com/ujapog/7/

Існує псевдоелемент Microsoft, який дозволяє змінювати колір тексту:

select[disabled='disabled']::-ms-value {
    color: #000;
}

Правило повинно бути власним, оскільки в іншому випадку інші браузери ігноруватимуть ціле правило через синтаксичну помилку. Див. Http://msdn.microsoft.com/en-us/library/ie/hh869604(v=vs.85).aspx щодо інших псевдоелементів лише Internet Explorer.

Редагувати: Я думаю, що правило має бути, select[disabled]::-ms-valueале у мене переді мною немає старих версій IE, щоб спробувати - перередагуйте цей абзац або додайте коментар, якщо це покращення.


Я пробував IE10 і IE11, і це працює. Зверніть увагу на відключений атрибут. Ви можете визначити це по-іншому. Це може бути disabled, disabled="", disabled="true", disabled="disabled". На жаль, це не працює в IE9.
Марек

8

Немає можливості замінити стилі для атрибута disable = "disable". Ось мій спосіб вирішити цю проблему. Зверніть увагу, що я лише вибираю кнопки подання у своєму випадку:

if ($.browser.msie) {
    $("input[type='submit'][disabled='disabled']").each(function() {
        $(this).removeAttr("disabled");
        $(this).attr("onclick", "javascript:return false;");
    });
}

приклад доступний: http://jsfiddle.net/0dr3jyLp/


4

У мене була та ж проблема із "відключеним" текстовим полем, зміною кольору шрифту на сірий. Я зробив обхідний шлях, використовуючи атрибут "readonly" замість атрибута "disabled" для textarea з нижче css

textarea[readonly] {
border:none; //for optional look
background-color:#000000; //Desired Background color        
color:#ffffff;// Desired text color
}

Це спрацювало для мене як шарм !!, тому я пропоную спробувати це спочатку перед будь-яким іншим рішенням, оскільки легко замінити "disabled" на "readonly", не змінюючи жодних інших частин коду.


Найкраще рішення для мене. Простий та ефективний.
Гастон,

3

Я знаю, що з моменту створення цієї теми минув деякий час, але я створив цей обхідний шлях, і ну ... Це спрацювало для мене! (Використання IE 9)

Єдиним наслідком є ​​те, що ви не можете вибрати значення вводу.

Використання Javascript:

    if (input.addEventListener)
            input.addEventListener('focus', function(){input.blur()}, true)
    if (input.attachEvent)
            input.attachEvent("onfocus", function(){input.blur()})

Це рішення має неприємний побічний ефект, завдяки якому користувач не може переходити через прапорець до наступного елемента керування - юк. Тим паче, що ви змусили його порушити юзабіліті-крос-браузер.
robocat

2

Я просто зробив весь фон світло-сірим кольором, я думаю, це простіше / швидше передає, що коробка відключена.

input[disabled]{
  background: #D4D4D4;     
}

1
Будь-яка ідея про те, чому це голосують проти? Це працює в останній версії IE, FF та Chrome ...
Wouter

3
Питання раніше не було IE8?
fncomp

1

Я вирішив проблему "відключення" елемента керування в IE без потворного сірого за допомогою вхідного елемента керування type =, щоб залишити його включеним і використовувати невеликий javascript у події onclick, щоб запобігти змінам:

onclick='this.checked == true ? this.checked = false : this.checked = true;'

3
Я думаю, onclick='return false;'робить те саме, але простіше
Філфрео

1

Як згадував Уейн, і через три роки все ще не пощастило з IE9, але ...

Ви можете спробувати знизити opacityвикористовуваний CSS, це робить його більш читабельним і допомагає в усьому відключеному стані.


0

Це рішення, яке я знайшов для цієї проблеми:

// якщо IE

inputElement.writeAttribute ("неможливо вибрати", "увімкнути");

//Інші браузери

inputElement.writeAttribute ("вимкнено", "вимкнено");

За допомогою цього трюку ви можете додати таблицю стилів до елемента введення, який працює в IE та інших браузерах у вашому нередагованому вікні введення.


0

Я змішав рішення user1733926 та Hamid, і я знайшов ефективний код для IE8, було б непогано знати, чи він також працює в 9/10 (?).

<script type="text/javascript">
if ($.browser.msie) {
    $("*[disabled='disabled']").each(function() {
        $(this).removeAttr("disabled");
        $(this).attr("unselectable", "on");
    });
}
</script>

0

Прочитавши цю публікацію, я вирішив створити введення, яке діє подібно до вимкненого поля введення, але було "лише для читання".

Отже, я зробив це так, щоб його не можна було вибрати або вибрати вкладку, або мати курсор миші, який дав користувачеві ідею, що він може змінити або вибрати значення.

Перевірено на IE8 / 9, Mozzila 18, Chrome 29

<input name="UserName" class="accountInputDisabled" id="UserName" type="text" readOnly="readonly" value="" unselectable="on" tabindex="-1" onselectstart="return false;" ondragstart="return false;" onmousedown='return false;'/>


input.accountInputDisabled {
    border: 1px solid #BABABA !important;
    background-color: #E5E5E5 !important;    
    color: #000000;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -moz-user-input: disabled;
    -ms-user-select: none;
    cursor:not-allowed;
}

input:focus {
    outline: none;
}          

0

Не потрібно замінювати CSS за допомогою підходу, заснованого на класах, і гра з подіями працює ідеально

Ви можете зробити одне:

<button class="disabled" onmousedown="return checkDisable();">

function checkDisable() {
 if ($(this).hasClass('disabled')) { return false; }
 }

http://navneetnagpal.wordpress.com/2013/09/26/ie-button-text-shadow-issue-in-case-of-disabled/


0

Видаліть відключений атрибут і використовуйте атрибут readonly . Напишіть необхідний CSS для досягнення необхідного результату. Це працює в IE8 та IE9.

наприклад, для темно-сірого,

 input[readonly]{
   color: #333333;     
 }

readonlyАтрибут ігнорується , якщо значення typeатрибута hidden, range, color, checkbox, radio, fileабо , buttonщоб вона не може працювати , як очікується , на всіх входах
Frinsh


0

Проблема вирішена в IE11. Якщо проблема все ще залишається в IE11, перевірте, чи використовується механізм візуалізації, який використовує IE.


-2

Я натрапив на цей шматок коду в stackoverflow, який допоміг мені зняти вимкнення класу css за допомогою javascript.

$("#textboxtest").prop("disabled", false).removeClass("k-state-disabled");

Оригінальний потік можна знайти в розділі Застосування класу з відключеним станом до введення тексту - Kendo UI Думав, я повинен поділитися!


Вам слід зауважити, чи це стосується Кендо чи ні. Не дуже корисний у його нинішньому складі
yardpenalty.com

-2

Використовуйте цей css, працює для IE11:

input[disabled="disabled"], select[disabled="disabled"], textarea[disabled="disabled"] {
    opacity:0.99 !important;
    background:black;
    text-shadow:inherit;
    background-color:white;
    color:black
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.