Focus on list item on down arrow press

2020-02-04 02:23发布

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.

4条回答
Fickle 薄情
2楼-- · 2020-02-04 02:55

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

查看更多
迷人小祖宗
3楼-- · 2020-02-04 02:59

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/

查看更多
男人必须洒脱
4楼-- · 2020-02-04 03:03

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

查看更多
我只想做你的唯一
5楼-- · 2020-02-04 03:04

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.

查看更多
登录 后发表回答