메인 화면에 bxslider를 이용한 배너 슬라이더가 있다.


웹접근성 조사에서 아래와 같은 지적사항이 나왔다.


키보드에 의한 초점은 논리적으로 이동해야 하며, 시각적으로 구별할 수 있어야 한다.

① 초점 이동 순서가 논리적이지 않거나 일관성이 없는 경우

② 초점 또는 키보드의 위치를 나타내는 개체가 시각적으로 표시되지 않은 경우

③ 숨겨진 콘텐츠 및 의미 없는 개체에 초점이 이동 되는 경우


이중 3번이 지적사항으로 나왔다.


1.숨겨진 콘텐츠에 초점이동

-키보드 tab키를 이용하여 탐색 시 숨겨진 콘텐츠에 접근되어 초점이 사라집니다.

*숨겨진 콘텐츠에 접근시 화면에 노출되거나, 숨겨진곳에 접근되지 않도록 제공해야 합니다.


우선 기존 소스를 보면


var mainSlider = $('.mainSlider').bxSlider({

auto: true,

autoControls: true,

stopAutoOnClick: true,

pager: true,

speed:500,

autoControlsCombine: true,

responsive: true,

pause: 5000

});


소스를 아래의 빨간색 부분을 추가해주었다.


var mainSlider = $('.mainSlider').bxSlider({

auto: true,

autoControls: true,

stopAutoOnClick: true,

pager: true,

speed:500,

autoControlsCombine: true,

responsive: true,

pause: 5000,

// 웹접근성 추가

onSliderLoad: function(){

$(".bx-clone").find("a").prop("tabIndex","-1");

},

onSlideAfter: function(){

$(".mainSlider").children("li").each(function(){

if($(this).attr("aria-hidden") == "false"){

$(this).find("a").attr("tabIndex","0");

}else{

$(this).find("a").attr("tabIndex","-1");

}

});

}

});


// 웹 접근성

$('.mainSlider a').focusin(function () {

mainSlider.stopAuto();

});


bxSlider 제공 함수인 

onSliderLoad 에 복사되는 항목의 포커스를 가져가는 a태그를 찾아 tabIndex를 -1로 설정합니다.

onSlideAfter 에는 현재 보여지는 슬라이드의 a태그에는 tabIndex를 0으로 설정하고

숨어있는 슬라이드는 -1로 설정합니다.

이는 탭이동시 숨어있는 슬라이드로 포커스가 들어가는 것을 방지하기 위함입니다.


그리고, 슬라이드 안의 a태크에 포커스가 갔을때 슬라이더를 중지시크는 명령을 추가합니다.

이는 포커스 상태인데 슬라이딩이 되어 포커스가 숨는 것을 방지하기 위함입니다.

요런  jquery 달력인 datepicker를 사용하고 있었다.




<!doctype html>

<html lang="en">

 <head>

  <meta charset="UTF-8">

  <title>datepicker</title>

  <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">

  <script src="https://code.jquery.com/jquery-1.7.2.js"></script>

  <script src="https://code.jquery.com/ui/1.9.1/jquery-ui.js"></script>

<script type="text/javascript">

$( function() {

var options = {

showOn : 'button'

, buttonImage : 'https://jqueryui.com/resources/demos/datepicker/images/calendar.gif'

, buttonText : '날자선택'

, buttonImageOnly : true

, showMonthAfterYear : true

, changeYear : true

, changeMonth : true

, dateFormat : 'yy-mm-dd'

, monthNamesShort : ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'] // 월의 한글 형식.

, dayNamesMin : ['일','월','화','수','목','금','토']

};

    $(".datepicker").datepicker(options);

});

</script>

 </head>

 <body>

<input type="text" class="datepicker" id="date1">

~

<input type="text" class="datepicker" id="date2">

 </body>

</html>



퍼블리셔 분이 datepicker에 대한 수정을 요청하셨다. 웹접근성에 맞게 작동해야 한다는 것이다.


날짜 input안에서 탭을 하면 달력 이미지로 포커스가 가고 거기서 앤터를 치면 달력이 펼쳐져야 된다는 것이다.


현재소스에서는 input 옆에 버튼이 생기지만 이미지만 있어서 그쪽으로는 포커스가 가질 않는다.


그래서 엄청난 삽질을 했다.


datepicker를 통제하기 위해 무지막지한 스크립트를 덕지덕지 붙이기 시작했다.


그러던 중 buttonImageOnly 라는 속성이 뭐지... false로 주면 어떻게 되나...

false로 설정하고 새로 고침을 하니...


button이 생성되고 이미지가 button안에 BG로 보이는 것이다.


역시... tutorial을 제대로 읽어야 한다.


그래야 고생을 안한다.


buttonImageOnly : false


요것만 바꿔주면 된다.. 




+ Recent posts