2010-06-17 6 views
30

sehen Sie das Formular HTML-Code unterTab Index auf div

<form method="post" action="register">  
    <div class="email"> 
     Email <input type="text" tabindex="1" id="email" value="" name="email">     </div> 
    </div> 
    <div class="agreement"> 
     <div tabindex="2" class="terms_radio"> 
      <div onclick="changeTerm(this);" class="radio" id="terms_radio_wrapper" style="background-position: left 0pt;"> 
       <input type="radio" id="terms" value="1" name="terms"><label for="terms">I have read and understood the</label> 
      </div> 
     </div> 
    </div> 
    <div class="form_submit"> 
     <input type="button" tabindex="3" value="Cancel" name="cancel"> 
     <input type="submit" tabindex="4" value="Submit" name="submit">   
    </div> 
</form> 

Hier gestylt ich die Vereinbarung Kontrollkästchen in der Weise, dass Radioeingang vollständig versteckt und Hintergrundbild wird an den Wrapper div angewendet und Onclick des Wrapper Divs schaltet sowohl das Hintergrundbild als auch den aktivierten Status der Radioeingabe um.

Ich brauche den tabindex Index für den ‚terms_radio‘ DIV zu setzen, einfach tabindex = „2“ Attribut auf div nicht funktioniert,

Ist es möglich, die punktierte Grenze auf dem Etikett für den Radioeingang zu bringen beim Drücken der TAB, wenn sich der Cursor im E-Mail-Eingabefeld befindet?

Antwort

29

DIV-Elemente sind nicht kompatibel mit Tabindex in HTML4).

(HINWEIS HTML 5-Spezifikation ist dies erlauben, aber, und es funktioniert im Allgemeinen unabhängig)

Die folgenden Elemente unterstützen die tabindex-Attribut: A, AREA, BUTTON, INPUT, OBJECT, SELECT und TEXTAREA.

Im Wesentlichen alles, was Sie erwarten könnten, um den Fokus zu halten; Formularelemente, Links, etc.

Was ich wahrscheinlich hier machen möchte, ist ein wenig JS (ich würde für etwas relativ schmerzlos empfehlen), um an das Fokusereignis auf dem Eingabeelement zu binden und die Grenze zu setzen das Elternteil div.

Haften Sie diesen an der Unterseite des Körpers Tag jQuery aus dem Google-CDN zu greifen:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script> 

Dann so etwas wie dies wahrscheinlich den Trick tun würde:

$(function() { 
    $('div.radio input').bind({ 
     focus : function() { 
      $(this).closest('div.radio').css('border','1px dotted #000'); 
     }, 
     blur : function() { 
      $(this).closest('div.radio').css('border','none'); 
     } 
    }); 
}); 
+31

Gemäß der HTML4 spec, richtig, aber gemäß der HTML5-Spezifikation (siehe http://dev.w3.org/html5/spec-author-view/editing.html#sequential-focus- navigation-and-the-tabindex-attribute und http://dev.w3.org/html5/spec-author-view/index.html#attributes-1) und in der Praxis kann [tabindex] auf andere Elemente angewendet werden ] (http://snook.ca/archives/accessibility_and_usability/elements_focusable_with_tabindex), –

+7

Diese Antwort muss wirklich aktualisiert werden, um HTML5 zu reflektieren oder eine andere Antwort hier als die richtige zu markieren. – cirrus

+1

tabindex = 0 hat den Trick für mich gemacht. Aber wenn es div fokussiert, kann ich es nicht mit der "Enter" -Taste treffen. Mausklick funktioniert. Irgendeine Idee? – vissu

-1

jSFiDDLE

$(document).ready(function() { 
lastIndex = 0; 
$(document).keydown(function(e) { 
    if (e.keyCode == 9) var thisTab = $(":focus").attr("tabindex"); 
    if (e.keyCode == 9) { 
     if (e.shiftKey) { 
      //Focus previous input 
      if (thisTab == startIndex) { 
       $("#" + tabLimitInID).find('[tabindex=' + lastIndex + ']').focus(); 
       return false; 
      } 
     } else { 
      if (thisTab == lastIndex) { 
       $("#" + tabLimitInID).find('[tabindex=' + startIndex + ']').focus(); 
       return false; 
      } 
     } 
    } 
}); 
var setTabindexLimit = function(x, fancyID) { 
     console.log(x); 
     startIndex = 1; 
     lastIndex = x; 
     tabLimitInID = fancyID; 
     $("#" + tabLimitInID).find('[tabindex=' + startIndex + ']').focus(); 
    } 
/*Taking last tabindex=10 */ 
setTabindexLimit(10, "Selector_With_Where_Tab_Index_You_Want"); 
}); 

setTabindexLimit() Funktion zwei Attribute der letzte Tabindex in Div und Selector_With_Where_Tab_Index_You_Want ist die Klasse oder ID von div, in der tabindex wiederholt werden soll.

0

Sie können Tabindex = "2" für Radioelement setzen und das Radioelement ausblenden (nicht mit Anzeige: keine, aber mit Z-Index, so dass es tabbable bleibt). Wenn Sie mit der Tabulatortaste auf dem Feld E-Mail-Eingangs zu sein drücken, wird Radio konzentrieren, und können Sie

input:focus+label {} 

verwenden, um das Label