आप एक div "tabbable" कैसे बनाते हैं?


92

मेरे पास बटन हैं जो दिव्य तत्व हैं और मैं उन्हें बनाना चाहता हूं ताकि उपयोगकर्ता के लिए अपने कीबोर्ड पर टैब कुंजी दबाएं और उनके साथ आगे बढ़ सकें। मैंने उनके पाठ को एंकर टैग में लपेटने की कोशिश की है, लेकिन यह काम नहीं करता है।

क्या किसी के पास एक समाधान है?


आप बटनों के बीच टैब करना चाहते हैं? या divs?
Dancrumb

2
यदि एंकर के पास एक hrefविशेषता है तो उसे काम करना चाहिए। यह मार्कअप का एक उपयुक्त उपयोग हो सकता है या नहीं हो सकता है जब तक कि सक्रिय वस्तु वास्तव में कुछ न करे।
टिम मेडोरा

प्रश्न पूछा गया है stackoverflow.com/questions/3059203/tab-index-on-div
ntgCleaner

धन्यवाद, href समाधान सबसे अच्छा काम करता है! टिम, यदि आप एक उत्तर प्रदान करते हैं तो मैं इसे स्वीकार करूंगा।
TheBoss

जवाबों:


127

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>

1
NB: tabindex HTML <5 में divs की एक वैध विशेषता नहीं है। संदर्भ {
नेपल्स

4
@Dancrumb, हाँ वे एचटीएमएल 5 में हैं
Neps

45
संभवत: उपयोग करने के लिए बेहतर है, tabindex=0ताकि प्राकृतिक टेबिंग ऑर्डर के साथ टक न हो।
स्टीवेक्स

7
Btw, यह एक को प्रवेश करने के साथ उस पर क्लिक करने की अनुमति नहीं देता है।
Ciantic

5
Hmn, @ किसी भी विचार से कि हम कैसे काम कर सकते हैं या उस पर क्लिक करते समय प्रवेश पर क्लिक पर अनुकरण कर सकते हैं? hmn
Jomar Sevillejo

7

उन लोगों के लिए, जो स्वीकृत उत्तर के अलावा, आप निम्न टैब जोड़ सकते हैं, जब आप इसे टैब करते हैं, तो 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 plugin $ () में बनाया है


1
मेरा मानना ​​है कि कीप इवेंट के बजाय कीडाउन इवेंट का उपयोग करना बेहतर है, जैसा कि यहाँ सुझाया गया है: developer.mozilla.org/en-US/docs/Web/Accessibility/… । कीडाउन का एक स्पष्ट लाभ यह है कि यदि आप अपने हैंडर फंक्शन (क्लिक (कॉल) के बाद) से गलत लौटते हैं, तो यह पेज पर कहीं और ईवेंट के प्रचार को सही ढंग से रोक देगा, जबकि कीप के साथ यह काम नहीं करता है।
एम काट्ज

अंतरिक्ष पेज को स्क्रॉल भी कर सकता है। आपको रोकने के लिए निवारण फ़ंक्शन का उपयोग करने की आवश्यकता हो सकती है।
b_laoshi

3

tabindex="0"प्रत्येक div के लिए विशेषता जोड़ें जो आप सारणीबद्ध करना चाहते हैं। फिर सीएसएस छद्म वर्गों का उपयोग करें: हॉवर और: फ़ोकस, उदाहरण के लिए ऐप उपयोगकर्ता को सूचित करने के लिए कि डिव फोकस और क्लिक करने योग्य है, उदाहरण के लिए। क्लिक को संभालने के लिए जावास्क्रिप्ट का उपयोग करें।

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>


1

Jquery का उपयोग करके मुख्य प्रेस के साथ तत्वों को सारणीबद्ध और क्लिक करने योग्य बनाएं

मान्यताओं

  • सभी तत्व जो एक गैर-टैबेबल, गैर-क्लिक करने योग्य प्रकार के होते हैं और क्लिक करने योग्य होना चाहिए उनमें एक ऑनक्लिक विशेषता होती है (इसे कक्षा या अन्य विशेषता में बदला जा सकता है)
  • सभी तत्व एक ही प्रकार के हैं; मैं divs का उपयोग करेंगे।
  • आप jquery का उपयोग कर रहे हैं

नमूना 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
            }
        });
});

आप यहां एक काम करने का उदाहरण पा सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.