2017-09-30 2 views
0

Ich habe eine Liste von Bild divs und will zwischen ihnen durch rechts, links, oben und unten Pfeile auf der Tastatur gedrückt werden.Ich versuchte die folgende jQuery aber der Bild Fokus ändert sich nie, wenn ich die Pfeile drücken.Ich möchte die Bildgrenze glüht wenn es den Fokus erhält, so weiß der Benutzer, welcher ausgewählt ist. (Ich möchte den Standardfokus beim ersten Laden immer auf der Seite haben.) Kann jemand mir helfen, dieses Problem zu beheben. Vielen Dank im Voraus.Wie navigiere ich zwischen divs mit Klassennamen auf Keydown?

Divs:

<div class="scroller"> 
<div id="Div1" style="display: visiable;"> 

<div class="image1"> 
<a href="javascript:doIt('10')"> 
<img src="./content/1/102.jpg" alt="..">Movie 1 
</a> 
</div> 
<div class="image2"> 
<a href="javascript:doIt('11')"> 
<img src="./content/2/102.jpg" alt="..">Movie 2 
</a> 
</div> 
<div class="image3"> 
<a href="javascript:doIt('12')"> 
<img src="./content/3/102.jpg" alt="..">Movie 3 
</a> 
</div> 
<div class="image4"> 
<a href="javascript:doIt('13')"> 
<img src="./content/4/102.jpg" alt="..">Movie 4 
</a> 
</div> 

</div> 
</div> 

jquery:

<script> 
$(document).keydown(function (e) { 
     var index = $(":focus").index() + 1; 
     if (e.which === 37) { 
       alert("left:37"); 
      $('div a:nth-child(' + (index - 1) + ')').focus(); 
    } else if (e.which === 39) { 
       alert("right 39"); 
      $('div a:nth-child(' + (index + 1) + ')').focus(); 
    } else if (e.which === 38) { 
       alert("Up:38"); 
      $('div a:nth-child(' + (index - 1) + ')').focus(); 
    } else if (e.which === 40) { 
       alert("Down:40"); 
      $('div a:nth-child(' + (index + 1) + ')').focus(); 
    } 
}); 


</script> 

css:

<style> 

.image { 
float:left; 
width: 50%; 
} 

img { 
width:100%; 
} 

a:focus { 
    //border: 1px solid black; 
    outline: none; 
    border-color: #9ecaed; 
    box-shadow: 0 0 10px #9ecaed; 
} 

.container { 
width:100%; 
} 

@media (max-width: 740px){ 
.image { 
width: 100%; 
} 
} 

div.scroller { 
overflow:scroll;  
} 
</style> 

Antwort

0

Ihre Wähler sind das Problem:

$('div a:nth-child(' + (index - 1) + ')').focus();

Dies zielt auf ein: nth-Kind von div, aber da jedes div nur ein einziges a hat, ist die Logik fehlerhaft. Es sollte die div als n-te-Kind der Mutter div (# Div1), wie dieses Ziel:

$('#Div1 div:nth-child(' + (index - 1) + ')').focus();

Sie können die divs fokussierbar machen, indem ihnen einen tabindex = 0 (dies führt zur Erhaltung normale Tabulatorreihenfolge geben, erlaubt ihnen jedoch, den Fokus zu erhalten, wodurch Ihre JS-Logik etwas einfacher wird).

Hier ist ein codepen Arbeits: https://codepen.io/anon/pen/dVzoQK

+0

Danke für Ihre Antwort. Ich habe die Änderungen vorgenommen, aber immer noch einen beliebigen Pfeil drücken, der Fokus ändert sich nie zum nächsten oder vorherigen! Darf ich wissen, wie man den Codepen ausführt? Es ist nicht wie jsfiddle :-( – user1788736

+1

Hier ist das gleiche Beispiel in jsfiddle, wenn das hilft: https://jsfiddle.net/j06v8sah/2/ – delinear

+0

Wie Sie in der Jsfiddle Beispiel Onload der Seite beachten Sie den Fokus nicht auf den ersten Daumen und wenn ich den pfeil drücke, verschwindet der fokus statt der focus wechselt zum nächsten oder vorherigen! ich brauche diese funktion, weil ich das entwickle, so dass es am ende mit der fernbedienung funktioniert! ändere es, während ich verschiedene Pfeile drücke? – user1788736

Verwandte Themen