2009-09-11 33 views
70

Tôi đang cố gắng thay đổi màu của các điều khiển đầu vào khi chúng bị tắt bằng cách sử dụng css sau.Cách thay đổi màu của các điều khiển html bị tắt trong IE8 bằng cách sử dụng css

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

Điều này hoạt động trong hầu hết các trình duyệt, nhưng không phải IE. Tôi có thể thay đổi bất kỳ thuộc tính phong cách nào khác như màu nền, màu đường viền, vv ... không phải màu. Bất cứ ai có thể giải thích điều này?

+2

# 666; làm cho tôi cười khúc khích một chút :) – Kimi

+1

Nó không có nghĩa là, Nó chỉ là một màu xám tốt cho điều khiển vô hiệu hóa. –

+0

Xem nhận xét này http://stackoverflow.com/a/5486152/2906042 Nó đã giúp tôi) –

Trả lời

120

Thật không may nếu bạn sử dụng thuộc tính đã tắt, bất kể bạn thử IE sẽ chỉ mặc định màu của văn bản thành Xám, với bóng trắng lạ ... điều ... nhưng tất cả các kiểu khác sẽ vẫn hoạt động. : -/

+1

Phải, nhưng tại sao? Có phải nó đang sử dụng một số kiểu bộ lọc phi tiêu chuẩn đằng sau hậu trường hay gì đó không? –

+66

Tôi gần như đã bỏ phiếu cho câu trả lời này, nhưng tôi đã dừng lại. Tôi sẽ làm điều đó vì tôi ghét câu trả lời; không phải vì câu trả lời sai. Bỏ phiếu lên: p – spudly

+3

@spudly: Tôi tán thành để nhận xét của bạn nhận được phiếu bầu. – canon

1

Cách tôi giải quyết vấn đề "vô hiệu hóa" một điều khiển trong IE với màu xám xấu xí với điều khiển đầu vào của hộp kiểm loại = là để nó được bật và sử dụng javascript nhỏ trong sự kiện onclick ngăn chặn những thay đổi:

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

Tôi nghĩ 'onclick = 'return false;'' thực hiện điều tương tự nhưng đơn giản hơn – philfreo

1

Như đã đề cập bởi Wayne, và ba năm sau đó vẫn không có may mắn w/IE9, nhưng ...

Bạn có thể thử giảm CSS opacity sử dụng, nó làm cho nó dễ đọc hơn và giúp với toàn bộ trạng thái bị vô hiệu hóa.

2

Tôi chỉ làm cho toàn bộ nền có màu xám nhạt, tôi nghĩ rằng nó dễ dàng hơn/nhanh chóng truyền đạt rằng hộp bị tắt.

input[disabled]{ 
    background: #D4D4D4;  
} 
+1

Bất kỳ ý tưởng nào về lý do này Nó hoạt động trong phiên bản mới nhất của IE, FF và Chrome ... – Wouter

+3

Có phải câu hỏi không phải là IE8 trước đây không? – fncomp

9

Không có cách nào để ghi đè kiểu cho thuộc tính disable = "disable". Đây là công việc của tôi xung quanh để khắc phục vấn đề này, lưu ý Tôi chỉ chọn nộp nút trong trường hợp của tôi:

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

dụ có sẵn: http://jsfiddle.net/0dr3jyLp/

3

Tôi biết nó được một lúc kể từ khi tạo ra các chủ đề này, nhưng tôi đã tạo ra cách giải quyết này, và ... Nó làm việc cho tôi! (Sử dụng IE 9)

Hậu quả duy nhất là bạn không thể chọn giá trị của đầu vào.

Sử dụng Javascript:

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

Giải pháp đó có tác dụng phụ khó chịu của việc ngăn người dùng có thể chuyển tab qua hộp kiểm đến Điều khiển tiếp theo - đặc biệt là vì bạn đã làm cho nó phá vỡ khả năng sử dụng cross-trình duyệt – robocat

11

tôi đã cùng một vấn đề cho <select> yếu tố trong IE10 và tìm thấy một giải pháp mà làm việc cho chỉ yếu tố chọn:

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

Có một Microsoft phần tử giả cho phép màu văn bản được sửa đổi:

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

Quy tắc phải nằm trên chính nó, bởi vì nếu không các trình duyệt khác sẽ bỏ qua toàn bộ quy tắc do lỗi cú pháp. Xem http://msdn.microsoft.com/en-us/library/ie/hh869604(v=vs.85).aspx đối với các phần tử giả khác của Internet Explorer.

Chỉnh sửa: Tôi nghĩ quy tắc có thể là select[disabled]::-ms-value nhưng tôi không có phiên bản IE cũ hơn trước tôi để thử - chỉnh sửa lại đoạn này hoặc thêm nhận xét nếu đó là cải tiến.

+0

Đã không làm việc trong IE10 cho tôi – Andez

+0

Tôi đã thử trên IE10 và IE11 và nó hoạt động.Chú ý về thuộc tính bị vô hiệu hóa.Bạn có thể xác định nó trên Nó có thể là 'disabled',' disabled = "" ',' disabled = "true" ',' disabled = "disabled" '. Thật không may nó không hoạt động trong IE9. – Marek

0

Đây là giải pháp mà tôi tìm thấy cho vấn đề này:

// nếu IE

inputElement.writeAttribute ("unselectable", "on");

// Trình duyệt khác

inputElement.writeAttribute ("disabled", "disabled");

Bằng cách sử dụng thủ thuật này, bạn có thể thêm biểu định kiểu vào yếu tố đầu vào hoạt động trong IE và các trình duyệt khác trên hộp nhập không thể chỉnh sửa của bạn.

0

Tôi trộn các giải pháp của người dùng1733926 và Hamid và tôi tìm thấy một mã hiệu quả cho IE8, sẽ rất hay để biết nếu nó hoạt động trong tức là 9/10 không (?).

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

Tôi đã gặp vấn đề tương tự với việc thay đổi màu phông chữ "đã tắt" của văn bản thành màu xám. Tôi đã làm một workaround bằng cách sử dụng "readonly" thuộc tính thay vì thuộc tính "khuyết tật" để textarea với dưới css

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

Nó làm việc cho tôi như một say mê !!, vì vậy tôi đề nghị để thử đầu tiên này trước khi bất kỳ khác giải pháp vì dễ thay thế "bị vô hiệu hóa" bằng "chỉ đọc" mà không thay đổi bất kỳ phần mã nào khác.

+0

Giải pháp tốt nhất cho tôi. Đơn giản và hiệu quả. – Gaston

0

Sau khi đọc bài đăng này, tôi quyết định tạo đầu vào hoạt động tương tự như hộp nhập bị tắt nhưng "chỉ đọc".

Vì vậy, tôi đã thực hiện nó để không thể chọn hoặc được gắn thẻ hoặc có con trỏ chuột cho người dùng ý tưởng họ có thể thay đổi hoặc chọn giá trị.

Thử nghiệm trên 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

Xóa bị vô hiệu hóa thuộc tính và sử dụng chỉ đọc thuộc tính. Viết CSS cần thiết để đạt được kết quả cần thiết. Điều này làm việc trong IE8 và IE9.

cho ví dụ, đối với màu xám đậm,

input[readonly]{ 
    color: #333333;  
} 
+0

Thuộc tính 'readonly' bị bỏ qua nếu giá trị của thuộc tính' type' là 'hidden',' range', 'color',' checkbox', 'radio',' file' hoặc 'button' để nó có thể không hoạt động như mong đợi trên tất cả các đầu vào – Frinsh

0

Vui lòng kiểm tra mã CSS này.

input[type='button']:disabled, button:disabled 
{ 
    color:#933; 
    text-decoration:underline; 
} 

hoặc kiểm tra URL này. http://jsfiddle.net/kheema/uK8cL/13/

-2

Tôi đã xem đoạn mã này ở luồng ngăn xếp giúp tôi tắt lớp css vô hiệu bằng javascript.

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

Chủ đề ban đầu có thể được tìm thấy tại Applying k-state-disabled class to text inputs - Kendo UI Tôi nên chia sẻ!

+0

Bạn nên bình luận xem đây có phải là Kendo cụ thể hay không. Không phải là rất hữu ích trong thành phần hiện tại của nó – yardpenalty

-2

Sử dụng css này, làm việc cho IE11:

input[disabled="disabled"], select[disabled="disabled"], textarea[disabled="disabled"] { 
    opacity:0.99 !important; 
    background:black; 
    text-shadow:inherit; 
    background-color:white; 
    color:black 
} 
+0

hoạt động tốt cho IE8 cũng. –

Các vấn đề liên quan