2012-07-18 19 views
8

Tôi đang cố tạo hộp kiểm được thiết kế tùy chỉnh bằng cách sử dụng nhãn được liên kết với phần tử hộp kiểm và ẩn (hiển thị: không) hộp kiểm.Nhấp vào hộp kiểm không chọn nhãn nếu bị ẩn khi sử dụng IE 7 hoặc 8

Tính năng này hoạt động tốt trong tất cả các trình duyệt ngoại trừ IE, yêu cầu hộp kiểm hiển thị cho nhãn có thể nhấp được.

Dưới đây là mã của tôi ...

HTML

<input type="checkbox" id="myCheck" />​ 

CSS

label.checkbox { 
    border:1px solid #666; 
    width:25px; 
    height:23px; 
    display:block; 
}​ 

jquery

$("input[type=checkbox]").each(function() { 
    $(this).hide().before('<label for="' + $(this).attr("id") + '" class="checkbox"></label>'); 
}); 

$("input[type=checkbox]").live('change', function() { 
    if ($(this).prop('checked') == true) { 
     $('label[for=' + $(this).attr("id") + ']').html("X") 
    } else { 
     $('label[for=' + $(this).attr("id") + ']').html("") 
    } 
});​ 

Hoặc jsfiddle

012.
+0

Tôi nghĩ rằng điều này xảy ra trong Firefox quá, nhưng tôi không chắc chắn. – Inkbug

+0

Không có trong phiên bản mới nhất của FF trên OSX, không được thử trên các cửa sổ. – Tom

Trả lời

9

Tôi không biết liệu có một cách efective hơn để làm điều này, nhưng bạn có thể làm điều này bằng cách thiết lập vị trí nguyên tố checkbox ra khỏi trang,

.hiddenEl { 
    position:absolute; 
    top: -3000px; 
} 


$("input[type=checkbox]").each(function() { 
    $(this).addClass("hiddenEl").before('<label for="' + $(this).attr("id") + '" class="checkbox"></label>'); 
}); 

DEMO


CẬP NHẬT

Và bạn cũng có thể đặt độ mờ đục của checbox thành 0, sẽ ẩn nó mà không có "dispayl: none",

$(this).css("opacity", 0) 

hoặc

$(this).fadeTo(0, 0) 
+7

Lưu ý: Thường tốt hơn nên sử dụng 'left: -3000px' thay vì' top: -3000px' (hoặc 9999px). Khi bạn nhấp vào nhãn bằng cách sử dụng 'top', tiêu điểm sẽ được đặt thành radiobutton và IE8 sẽ cố gắng đưa nó vào chế độ xem - có tác dụng phụ không mong muốn khi cuộn lên đầu trang. Vì vậy, cung cấp nội dung của bạn phù hợp theo chiều ngang không có thanh cuộn ngang, tốt hơn nên sử dụng 'left' hơn' top' –

+0

Thuộc tính 'opacity' không được hỗ trợ trong Internet Explorer cho đến phiên bản IE9, do đó tôi phải sử dụng' filter: Alpha (opacity = 0) '. [mozilla-css-opacity] (https://developer.mozilla.org/en-US/docs/Web/CSS/opacity) – ityler22

+0

@ ityler22, tôi nghĩ bạn không phải lo lắng về điều đó, nó được xử lý bởi jquery . – ocanal

2

thử điều này:

#myCheck{ 
    position:absolute; 
    left:-9999px; 
    } 

Và rời khỏi hộp kiểm "nhìn thấy"

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