Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Focus on list item on down arrow press

I am creating a custom auto suggest-box I need to move on li items on arrow down press.

so I added tabindex attribute to li it is getting focus. but problem is that it scrolling the div up with some random height that it out the selected li from div.

enter image description here

after arrow down key:

enter image description here

and after some arrow-down key press:

enter image description here

and after that it goes out of screen while mouse down behave perfectly.

Here I made a Demo JSFiddle first click item1 and then press arrow down it behaving same.

like image 523
Zaheer Ahmed Avatar asked Apr 10 '13 14:04

Zaheer Ahmed


3 Answers

Elaborating on my comment

Set the container's scrollTop to index of focused li * li height.

return false upon keydown to prevent normal browser scrolling of overflown parent.

$('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/

like image 62
David Fregoli Avatar answered Nov 19 '22 18:11

David Fregoli


Have you tried using anchor instead of tabindex? e.g

<li><a href="#"></li>

In my experience some browsers cannot handle the focus on tabindex correctly

like image 2
CevenNome Avatar answered Nov 19 '22 16:11

CevenNome


I had a problem like that once and solved it by setting the CSS style overflow of the containing div to none or hidden depending on your preference.

like image 1
Cy Pangilinan Avatar answered Nov 19 '22 17:11

Cy Pangilinan