Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스크롤
- ES6
- Push
- ajax
- dom
- slice
- json
- IntersectionObserver
- input
- 이벤트 루프
- video
- Flex
- 배열
- animation
- ios
- event
- async
- 고차함수
- scroll
- This
- 클로저
- array
- 이벤트
- 문자열
- 비동기
- object
- 애니메이션
- Promise
- 이벤트 위임
- 모듈
Archives
- Today
- Total
FEDev Story
[스크랩] 접근성고려한 체크박스 및 라디오버튼 본문
*기본적으로 라디오는 좌우 화살표방향키로, 체크박스는 탭키와 스페이스바로 이동한다.
input[type=radio] + label ,
input[type=checkbox] + label {display:inline-block;line-height:0;vertical-align:middle}
input[type=radio],
input[type=checkbox] {border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}
input[type=radio] + label {position:relative;display:inline-block;padding:0 35px 0 30px;min-height:20px;line-height:19px;background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/radio.png") no-repeat;cursor:pointer;color:#666}
input[type=radio]:focus + label {background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/radio_on_.png") no-repeat}
input[type=radio] + label.on {background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/radio_on.png") no-repeat}
input[type=radio]:checked + label {background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/radio_on.png") no-repeat}
input[type=radio]:focus + label.on {background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/radio_on_.png") no-repeat}
input[type=radio] + label.disable,
input[type=radio]:disabled + label {background:url("//image.uplus.co.kr/images/renewal/images/cm/pc/radio_off.png") no-repeat}
input[type=radio] + label.disable,
input[type=radio]:disabled + label.disableOn {background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/radio_on.png") no-repeat}
input[type=checkbox] + label {position:relative;display:inline-block;padding:0 35px 0 30px;min-height:20px;line-height:19px;background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/check.png") no-repeat;cursor:pointer}
input[type=checkbox]:focus + label {background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/check_.png") no-repeat}
input[type=checkbox] + label.on {background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/check_on.png") no-repeat}
input[type=checkbox]:checked + label {background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/check_on.png") no-repeat}
input[type=checkbox]:focus + label.on {background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/check_on_.png") no-repeat}
input[type=checkbox] + label.disable {background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/check_off.png") no-repeat}
input[type=checkbox]:disabled + label {background:url("http://image.uplus.co.kr/images/renewal/images/cm/pc/check_off.png") no-repeat;cursor:default}
var ui = {
checkLabel : function() {
$(document).on('click', 'input:checkbox, input:radio', function (e) {
$inp = $(this);
if($inp.next().is("label")) {
var name = $inp.attr("name");
//only for radio
if($inp.attr("type") == "radio") {
$("input:radio[name=" + name + "]").each(function() {
$(this).next().removeClass('on');
});
}
//both checkbox and radio
if(name) {
$("input[name=" + name + "]").each(function(index) {
if($(this).is(":checked")) {
$(this).next().addClass('on');
} else {
$(this).next().removeClass('on');
}
});
} else {
//if name is not specified
if($inp.is(":checked")) {
$inp.next().addClass('on');
} else {
$inp.next().removeClass('on');
}
}
//check/uncheck all checkboxes
var $wrap = $inp.parent();
if($wrap.hasClass("otherCheck")) {
$wrap = $wrap.parent();
}
if($wrap.find("input:checkbox[name=allCheck]").size() == 1) {
if(name == "allCheck") {
if($inp.is(":checked")) {
$wrap.find("input[name!=allCheck]:checkbox").each(function() {
$(this).prop("checked", true);
$(this).next().addClass("on");
});
} else {
$wrap.find("input:checkbox").each(function() {
$(this).prop("checked", false);
$(this).next().removeClass("on");
});
}
} else {
var cnt1 = $wrap.find("input[name!=allCheck]").size();
var cnt2 = $wrap.find("input[name!=allCheck]:checked").size();
if(cnt1 == cnt2) {
$wrap.find("input[name=allCheck]").prop("checked", true);
$wrap.find("input[name=allCheck]").next().addClass("on");
} else {
$wrap.find("input[name=allCheck]").prop("checked", false);
$wrap.find("input[name=allCheck]").next().removeClass("on");
}
}
}
}
});
$(document).on('change', 'input:radio', function (e) {
var $this = $(this);
if( $this.prop('checked') ){
$thisId = $this.attr('id');
$thisGroup = $this.attr('name');
$("input[name="+$thisGroup+"]").siblings('label').removeClass('on');
$this.siblings('label').each(function(){
if($(this).attr('for') == $thisId){
$(this).addClass('on');
}
});
} else {
$this.next('label').removeClass('on');
}
}).change();
if($('input[type=checkbox], input[type=radio]').length){
$('input[type=checkbox], input[type=radio]').each(function(){
if($(this).attr('checked') == 'checked'){
var selObjName = $(this).attr('id');
$('label').each(function(){
if($(this).attr('for') == selObjName){
$(this).addClass('on');
}
});
}
});
}
}
}
$(function(){
ui.checkLabel();
})
결과보기 : https://codepen.io/zoo79/pen/wxNdjv
출처 : https://zoo79.tistory.com/10?category=297518
'Web.Dev' 카테고리의 다른 글
javascript:void(0)과 #중에 어떤것을 사용할까 (0) | 2019.12.05 |
---|---|
[Html] img 태그 속성 onError (0) | 2019.07.05 |
[최적화] DOMContentLoaded, load, unload출처: (0) | 2019.06.17 |
[최적화] 브라우저 렌더링 (0) | 2019.06.17 |
Swiper.js와 Ajax 호출을 이용한 동적 슬라이드 구현 (1) | 2019.03.26 |
Comments