Focus on list item on down arrow press
Asked Answered
T

4

16

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.

Trice answered 10/4, 2013 at 14:47 Comment(3)
see if this is what you want jsfiddle.net/mohammadAdil/38zR3/3Delrosario
something like this? jsfiddle.net/38zR3/9Spriggs
sorry, this supports tabbing as well jsfiddle.net/38zR3/14Spriggs
S
16

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/

Spriggs answered 10/4, 2013 at 15:36 Comment(0)
C
2

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

Carolus answered 10/4, 2013 at 14:58 Comment(0)
M
1

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.

Mccurry answered 10/4, 2013 at 14:57 Comment(1)
thanks... that work correctly but cant change that is requirement to show scroll.Trice
U
0

Add a .scrollTop() to make sure it is either centered or how you want it to be.

Untouchable answered 10/4, 2013 at 14:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.