jquery - 按向上和向下箭头选择 anchor 标记

标签 jquery anchor

我想在按下向上和向下箭头时选择 anchor 标记。

这是我的代码

 var keyindex,alinks;
    keyindex = -1;
    $('#ajax_response').keydown(function(e)
        {
            alinks = $('#ajax_response').find('a');
            if(e.keyCode == 40)
            {
                e.preventDefault();     
                if(keyindex == -1)
                {
                keyindex = 1;
                }
                if(alinks.length > 0 && keyindex < alinks.length)
                {
                $('#ajax_response').find('a')[keyindex++].focus();
                }
            }
            if(e.keyCode == 38)
            {
                e.preventDefault();
                if(keyindex == alinks.length)
                {
                keyindex = keyindex-2;
                }

                if(alinks.length > 0 && keyindex < alinks.length && keyindex >=0)
                {
                $('#ajax_response').find('a')[keyindex--].focus();
                }
            }
        });

但有时它无法正常工作。任何人都可以在此代码中找到问题,请告诉我。

请检查此链接 http://jsfiddle.net/rz550dwa/

最佳答案

您可以通过以下方式使其更加动态和高效

  1. 缓存包含链接的 jQuery 对象,这样您就不需要每次都搜索它们。
  2. 使用filter():focus动态查找当前聚焦的元素,而不必自己跟踪它。

这意味着如果用户手动聚焦/单击其中一个链接,它将继续正常工作。

如果你想让它循环,你只需要额外的else语句。否则将其删除。

$(document).ready(function(){
    var alinks = $('#ajax_response').find('a');
    if(alinks.length > 0) {
        alinks.first().focus();
        $('#ajax_response').keydown(function(e)
        {
            // get the index of the current focussed a 
            var keyIndex = alinks.index(alinks.filter(':focus'));
            if(e.keyCode == 40)
            {
                e.preventDefault();
                // find the next index to highlight
                if(keyIndex < 0) {
                    keyIndex = 0;
                } else if(keyIndex < alinks.length - 1) {
                    keyIndex++;
                } else {
                    keyIndex = 0; // for cyclic behaviour
                }
                alinks.eq(keyIndex).focus();
            }
            else if(e.keyCode == 38)
            {
                e.preventDefault();
                // find the previous index to highlight
                if(keyIndex > alinks.length -1) {
                    keyIndex = alinks.length -1;
                } else if(keyIndex > 0) {
                    keyIndex--;
                } else {
                    keyIndex = alinks.length -1; // for cyclic behaviour
                }
                alinks.eq(keyIndex).focus();
            }
        });
    }
});

Updated Fiddle

关于jquery - 按向上和向下箭头选择 anchor 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27523028/

相关文章:

hyperlink - 没有 anchor 文本的链接对搜索引擎优化不利吗?

css - 悬停被背景渐变覆盖

html - 那些可以像在 Firefox 中一样打开新浏览器的链接有什么魔力?

php - jquery masonry/isotope 内容周围的边框(没有空格)

javascript - 使用正则表达式将单词替换为字符串

javascript - 如何勾选每组checkbox至少勾选一个

javascript - 添加指向 CSS :nth-child class 的链接

javascript - 如何更改 anchor 外观并保持它直到单击另一个 anchor

jquery - href anchor 单击,导致使用 jquery、firefox、IE 10 失去对输入元素的焦点

javascript - 如何使用变量更改目标 <a>