div 요소 인 버튼이 있는데 사용자가 키보드의 탭 키를 누르고 그 사이를 이동할 수 있도록 만들고 싶습니다. 앵커 태그로 텍스트를 래핑하려고 시도했지만 작동하지 않는 것 같습니다.
누구에게 해결책이 있습니까?
div 요소 인 버튼이 있는데 사용자가 키보드의 탭 키를 누르고 그 사이를 이동할 수 있도록 만들고 싶습니다. 앵커 태그로 텍스트를 래핑하려고 시도했지만 작동하지 않는 것 같습니다.
누구에게 해결책이 있습니까?
href속성이 있으면 작동합니다. 활성화 가능한 항목이 실제로 어떤 작업을 수행하지 않는 한 마크 업을 적절하게 사용하거나 사용하지 않을 수 있습니다.
답변:
요소에 tabindex속성을 추가 하십시오 div.
예:
<div tabindex="1">First</div>
<div tabindex="2">Second</div>
steveax의 주석에 따라 탭 순서가 페이지의 요소 위치에서 벗어나지 않도록 tabindex하려면 0다음 과 같이 설정하십시오 .
<div tabindex="0">First</div>
<div tabindex="0">Second</div>
tabindex=0자연스러운 탭 순서를 따르지 않도록 사용하는 것이 좋습니다 .
관심있는 사람들을 위해 수락 된 답변 외에도 다음 jquery를 추가하여 탭할 때 div 스타일을 변경하고 Enter 및 Space를 처리하여 클릭을 트리거 할 수 있습니다 (그러면 클릭 핸들러가 나머지 작업을 수행합니다)
$(document).on('focus', '.button',function(){
$(this).css('border','1px dotted black')
});
$(document).on('keyup', '.button',function(e){
if(e.which==13 || e.which==32)
$(this).click()
});
누군가 이것을 jq 플러그인 $ (). makeTabStop으로 만들었다 고 확신합니다.
tabindex="0"탭으로 만들려는 각 div에 속성을 추가하십시오 . 그런 다음 CSS 의사 클래스 : hover 및 : focus를 사용합니다. 예를 들어 앱 사용자에게 div에 포커스가 있고 클릭 할 수 있음을 나타냅니다. 클릭을 처리하려면 JavaScript를 사용하십시오.
var doc = document;
var providers = doc.getElementsByClassName("provider");
for (var i = 0; i < providers.length; i++) {
providers[i].onclick = function() {
console.log(this.innerHTML);
};
}
.provider {
flex: 0 1 auto;
align-self: auto;
width: 256px;
height: 48px;
margin-top: 12px;
margin-right: 12px;
text-align: center;
line-height: 48px;
text-transform: uppercase;
background-size: contain;
background-repeat: no-repeat;
background-position: 10%;
background-color: gray;
}
.provider:hover{
cursor: pointer;
}
.provider:focus{
-webkit-box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
-moz-box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
box-shadow: 0px 2px 8px 2px rgba(0,0,0,0.4);
}
<h4>Click in this area first then press tab</h4>
<div id="email" class="provider" tabindex="0">email</div>
<div id="facebook" class="provider" tabindex="0">facebook</div>
<div id="github" class="provider" tabindex="0">github</div>
<div id="google" class="provider" tabindex="0">google</div>
<div id="twitter" class="provider" tabindex="0">twitter</div>
가정
샘플 HTML :
...
<div onclick="clicked(this)">Button 1</div>
<div onclick="clicked(this)">Button 2</div>
<div onclick="clicked(this)">Button 3</div>
...
Jquery 코드 : 페이지가로드되었을 때 실행되는 코드입니다. HTML 페이지에서 실행해야합니다.
$(()=>{
// make divs with an onclick attribute tabbable/clickable
$('div[onclick]')
.attr('tabindex', '0') // Add tab indexes
.keypress((evt)=>{
var key = evt.key;
evt.preventDefault(); // Ensure all default keypress
// actions are not used
if (key === ' ' || key === 'Enter') { // Only send click events for Space
// or Enter keys
evt.currentTarget.click(); // Run the click event for element
}
});
});
여기 에서 작업 예를 찾을 수 있습니다 .