C# 按键可根据自定义搜索跳转到DropDownList中的项目

C# 按键可根据自定义搜索跳转到DropDownList中的项目,c#,asp.net,C#,Asp.net,如何允许用户打开dropdownlist,然后键入几个字母以跳转到正确的项目?我需要实现我自己的搜索逻辑,因为格式是固定的,不能按原样搜索(都以一个开括号开始),但我不确定如何钩住行为。Jquery是首选,但任何跨浏览器工作的东西都可以 例如: (AABE)可调节的空调 (BAE)树皮空气设备 键入“ba”应跳转到第二个条目,以此类推 谢谢 在jQuery中,可以使用keydown事件。以下代码可在此处实时查看: HTML: 我相信您可以监听按键事件并将selectedIndex更改为找到的项。

如何允许用户打开dropdownlist,然后键入几个字母以跳转到正确的项目?我需要实现我自己的搜索逻辑,因为格式是固定的,不能按原样搜索(都以一个开括号开始),但我不确定如何钩住行为。Jquery是首选,但任何跨浏览器工作的东西都可以

例如:

(AABE)可调节的空调

(BAE)树皮空气设备

键入“ba”应跳转到第二个条目,以此类推


谢谢

在jQuery中,可以使用keydown事件。以下代码可在此处实时查看:

HTML:


我相信您可以监听按键事件并将selectedIndex更改为找到的项。谢谢,尽管JSFIDLE示例在Chrome中对我不起作用。谢谢,但这似乎也不起作用。试过IE和Chrome。你是不是先点击框,让它有焦点?首先单击该窗格中下拉列表的下方,然后键入aabeah ok,我明白了。谢谢,这就更接近了,但希望即使是第一个角色匹配也能跳转到第一个条目。这需要在找到匹配项之前进行完整搜索。此外,我将无法将数据搜索标记添加到select本身,它是asp.net dropdownlist.Error。您可以使用.attributes.add(“数据搜索值”)等添加属性。部分匹配就像indexOf(str)==0一样简单。我不会再花时间更新这个了。我以为你对JS和ASP.NET有一些基本的了解。
<select name="companies">
    <option value="">choose</option>
    <option value="1" data-search-match="AABE">(AABE) Able Air Conditioning</option>
    <option value="2" data-search-match="BAE">(BAE) Bark Air Equipment</option>
</select>

<a id="clear-search" href="#">Clear Search</a>
 $(document).ready(function(){

   var $select = $('select'),
        searchQuery = '';

    $(document).on('keydown', function (e){

        // get the char value and append to search string
        searchQuery += String.fromCharCode(e.which);

        // unselect previously selected option
        deselectSelectedOption();

        // find matching option                
        var $selected = $select.find('option').filter(function(){            
            return $(this).data('search-match') === searchQuery;
        });

        if($selected){
            $selected.attr('selected', 'true');
        }                      
    });    

     $('#clear-search').click(function(e){
       e.preventDefault();
       searchQuery = '';                        
       deselectSelectedOption();
       $select.find('option').first().attr('selected', 'true');
    });

    function deselectSelectedOption(){
        $select.find('option[selected]').removeAttr('selected');     
    }        
});​