Je crée une boîte de suggestion automatique personnalisée. Je dois déplacer des éléments li
en appuyant vers la touche vers le bas.
Alors j'ai ajouté l'attribut tabindex à li, il obtient la mise au point. Mais le problème est qu'il défile le div vers le haut avec une certaine hauteur aléatoire que le li sélectionné de div.
Après la touche flèche vers le bas:
Et après une touche enfoncée, appuyez sur:
Et après cela, il sort de l'écran alors que la souris descend se comporte parfaitement.
Ici, j'ai fait un Demo JSF , puis cliquez sur l' item1
, puis appuyez sur la flèche, il se comporte de la même manière.
Elaborer mon commentaire
Réglez le scrollTop
du conteneur en index of focused li
li height
index of focused li
* li height
index of focused li
.
return false
sur la déviation pour éviter le défilement normal du navigateur du parent survolé.
$('div.container').on('focus', 'li', function() { var $this = $(this); $this.addClass('active').siblings().removeClass(); $this.closest('div.container').scrollTop($this.index() * $this.outerHeight()); }).on('keydown', 'li', function(e) { var $this = $(this); if (e.keyCode === 40) { $this.next().focus(); return false; } else if (e.keyCode === 38) { $this.prev().focus(); return false; } }).find('li').first().focus();
Jsfiddle http://jsfiddle.net/38zR3/42/
Avez-vous essayé d'utiliser l'ancre au lieu de Tabindex? par exemple
<li><a href="#"></li>
Selon mon expérience, certains navigateurs ne peuvent pas gérer l'accent sur tabindex correctement
J'avais un problème comme celui-là une fois et je l'ai résolu en configurant le overflow
de style CSS du div divisé sur none
ou hidden
selon vos préférences.
Ajoutez un .scrollTop()
pour vous assurer qu'il soit centré ou comment vous le souhaitez.