ฉันมีปุ่มที่เป็นองค์ประกอบ 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 ที่คุณต้องการ tabbable จากนั้นใช้ CSS pseudo class: hover and: 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
}
});
});