【问题标题】:Selecting List Element (capturing down/up arrow) [closed]选择列表元素(捕获向下/向上箭头)[关闭]
【发布时间】:2012-07-09 17:42:49
【问题描述】:

我有以下 HTML 结构('ul li' 呈现为下拉/选择)

<input id="input_city" type="text" />

<div class="suggestions">
 <ul>
  <li value="0" name="New York">New York</li>
  <li value="1" name="London">London</li>
  <li value="2" name="Paris">Paris</li>
  <li value="3" name="Sydney">Sydney</li>
 </ul>
</div>

需要 JavaScript/jQuery 代码来捕获将选择第一个“li”元素的向下箭头键按下事件(输入时)

连续向下键选择下一个'li'元素;和向上键选择以前的 'li' 元素。

【问题讨论】:

标签: javascript jquery drop-down-menu dom-events keypress


【解决方案1】:

由于您的问题有点过于模糊,因此您要完成的工作并不完全清楚。

如果您要突出显示 li 元素,请使用:

var $listItems = $('li');

$('input').keydown(function(e) {
    var key = e.keyCode;
    var $selected = $listItems.filter('.selected');
    var $current;

    if (![38, 40].includes(key)) return;

    $listItems.removeClass('selected');

    if (key == 40) { // Down key
        if (!$selected.length || $selected.is(':last-child')) {
            $current = $listItems.eq(0);
        } else {
            $current = $selected.next();
        }
    } else if (key == 38) { // Up key
        if (!$selected.length || $selected.is(':first-child')) {
            $current = $listItems.last();
        } else {
            $current = $selected.prev();
        }
    }

    $current.addClass('selected');
});​

这是小提琴:http://jsfiddle.net/GSKpT/


如果您只是想设置 input 字段的值,请将最后一行更改为:

$(this).val($current.addClass('selected').text());

这是小提琴:http://jsfiddle.net/GSKpT/1/

【讨论】:

  • 不确定这个问题,但这个答案就是我想要的:)
  • 嗨,如果列表在溢出的 div 容器中,如何上下推送?
  • 感谢@Joseph 提供了非常好的方法,我正在使用您的代码,这也是我一直在寻找的。​​span>
【解决方案2】:

您可以为此使用MousetrapJS。这是一个如何实现向下键的示例。 首先将选中的类添加到第一个列表项中。

Mousetrap.bind('down', function() {
    var next = $(".suggestions  li.selected").removeClass("selected").next();
    if (next.length) {
       next.addClass("selected");
    } else {
       $(".suggestions li").first().addClass("selected");
    }
});

【讨论】:

  • if(next) 将始终返回true,请改用if(next.length !== 0)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 2021-05-03
相关资源
最近更新 更多