按键选择bootstrap下拉值

时间:2014-01-31 06:58:08

标签: javascript jquery html twitter-bootstrap

我正在使用bootstrap btn-group下拉菜单作为下拉列表的组合框。 工作正常。

<div class="btn-group insertText insertTextSMSTemplate">
    <button class="btn btn-small dropdown-toggle" data-toggle="dropdown">Select a Value</button>
    <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown" style='padding:2px;'><span class="icon-chevron-down"></span>
    </button>
    <ul class="dropdown-menu" style="height: 100px; overflow: auto">
        <li><a href="#"></a>
        </li>
        <!-- <li class="divider"></li>
        <li><a href="#">Separated link</a></li> -->
    </ul>
</div>

我写了一个jquery函数来选择所选的li值并制作按钮文本。

但问题是我的列表很长,我在下拉列表中滚动。所以如果我想从下拉列表中选择说70th li元素,我必须向下滚动并选择。

我想添加一个功能,如果第70个值是“Temp”那么如果我按“T”,从列表中的T开始的单词只显示在下拉列表中。

5 个答案:

答案 0 :(得分:2)

修改了jenkilabs&#39;码。 如果你想循环通过按键开头的项目,请使用:


        $(".dropdown").bind('keydown', function (event) {
            //this will open the list if it is not open and select a value 
            if (event.keyCode != 13){ 
                    if ($(this).find('button').attr('aria-expanded') == 'false')
                    {
                        $(this).find('.dropdown-toggle').dropdown('toggle');
                    }
            }
            var keyChar = String.fromCharCode(event.keyCode).toLowerCase();
            var selectedItems = $(this).find('a').filter(function () {
                return $(this).text().toLowerCase().indexOf(keyChar) === 0;
            });
            var f = $(selectedItems).is(':focus');
            if (f)
            {
                selectedItems = $('a:focus').parent().nextAll().find('a').filter(function () {
                    return $(this).text().toLowerCase().indexOf(keyChar) === 0;
                }).first();
                if (selectedItems.length == 0)
                {
                    selectedItems = $(this).find('a').filter(function () {
                        return $(this).text().toLowerCase().indexOf(keyChar) === 0;
                    });
                }
            }
            selectedItems.first().focus();
        });

.ToLowerCase将允许您选择以小写字母开头的项目 字符,并且您不必对以相同字符开头的项目进行分组 角色在一起前。

  1. a
  2. 一个
  3. B'/ LI>
  4. 一个
  5. 此代码将找到第三个&#39; a&#39;没有。 4,如果你一直按a,那么它会回到第一个&#39; a&#39;

    只要这个(见下文)是下拉列表的结构,这将有效。

    <div class="dropdown">
          <button class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
    <ul class="dropdown-menu">
     <li><a>text here</a></li>
    </ul>
    </div>
    

    确保<a>嵌套在<li></li>内,并且有一个div,其中class =&#34; dropdown&#34;围绕<button><ul>

答案 1 :(得分:1)

我也需要这个。这是我使用jQuery按键输入的Bootstrap 3焦点/选择的工作解决方案:

$(".dropdown").bind('keydown', function(event) {
    var keyChar = String.fromCharCode(event.keyCode);
    var selectedItem = $(this).find('a').filter(function(){ return $(this).text().indexOf(keyChar) === 0; }).first();
    selectedItem.focus();
});

说明:我们的想法是获取列表中的所有可聚焦元素,在本例中为标记,然后通过某种方法对其进行过滤,以测试您按下的键是否为第一个字符。

希望这有帮助

答案 2 :(得分:0)

我认为下面的内容应该有效。不确定但是没试过跑。

$("#ID").keydown(function(e){ // the keydown even on ul
    var chr =String.fromCharCode( e.which );
    $(this).find("li").each(function(){ // if the key down is not in UL then make sure the "this" should refer to UL
      var name = $(this).text();
        if( name.toLowerCase().indexOf(chr.toLowerCase()) === 0 ) {
            $(this).focus(); // this should focus you
            return false; 
        }
   });

答案 3 :(得分:0)

如果您对使用插件感兴趣,可以使用Select2。它非常易于使用,当您初始化select作为select2元素时,它将包含一个搜索栏,可在您键入选项时自动过滤选项。

以下是the examples,因此您可以查看是否喜欢它。

答案 4 :(得分:0)

我也遇到了同样的问题,我这样解决了它:

首先将ID添加到ul和button 然后执行以下操作

$('#buttonId').on('keyup', function(){ 
       var key = String.fromCharCode(event.keyCode);
       if(event.which !== 8) {
           keyChar += key;
       } 
       if(event.which === 8) {
          keyChar = keyChar.slice(0, -1);
       }
       var regex = new RegExp('^' + keyChar, 'i');

       $("#ulId li").each(function(){
         if(regex.test($(this).text())) {
            $(this).css("display", "block");
            $(this).addClass('active');
         }else{
            $(this).css("display", "none");
         }
       });
 });
 $('#ulId').on('blur', function(){ 
   keyChar = '';
   });

NB。还全局将keyChar定义为null