捕获按键以过滤元素

2024-05-31

我正在创建一个<select>替换使用 jQuery 将其替换为 div 和链接。

现在我想要filter当我开始在新的选择打开的情况下输入内容时。

Like 谷歌翻译 http://translate.google.com/在语言选择器上执行。

您对我如何进行有什么建议吗?

我开始做一些事情:

$(document).bind('keypress', function(event) {
   //...
});

但我只捕获单个键,而不是整个键入的字符串。


重要的:

  • 我没有<input />来检测keypress or keyup其上的事件
  • 我不想创建这个<input />因为我只想使用<div>'s and <a>在“新选择”上
  • 最近,我需要使用箭头键 + Enter 在打开的选择上导航,以使用键盘选择选项

您可以通过“监听”窗口上按下的内容,然后检测按下的特定字母/字符串,搜索项目列表,如果发现它更改其 css 属性或添加新的“选定”类来实现此目的,即(演示=>http://jsfiddle.net/steweb/mC6tn/ http://jsfiddle.net/steweb/mC6tn/..尝试按任意键:)并且added找到东西后按左或右 btns,或输入):

JS:(假设您想要查找内容并选择它的每个元素都有类“elem”)

var whatYouAreSearching = $('<div class="searching-string"></div>'); //just to see what string you're typing
$(document.body).append(whatYouAreSearching);

function search(what){
    what = what.toLowerCase();
    $('.elem').removeClass('selected'); //reset everything
    $.each($('.elem'),function(index,el){
        if($(el).html().toLowerCase().indexOf(what) > -1){
            $(el).addClass('selected');
            return false; //found, 'break' the each loop
        }
    });
}

var letterPressed = [];
var timeOutResetLetters = null;

$(window).keypress(function(e) {
    clearTimeout(timeOutResetLetters); //clear timeout, important!
    timeOutResetLetters = setTimeout(function(){ //if 500 ms of inactivity, reset array of letters pressed and searching string
        letterPressed = []; 
        whatYouAreSearching.html('');
    },500);
    letterPressed.push(String.fromCharCode(e.keyCode)); //look at the comment, thanks Niclas Sahlin 
    whatYouAreSearching.html(letterPressed.join('')); //show string
    search(letterPressed.join('')); //and search string by 'joining' characters array
});

EDIT添加了左/右/回车键处理

$(window).keydown(function(e){ //left right handling
    var currSelected = $('.elem.selected');

    if(e.keyCode == "37"){ //left, select prev
        if(currSelected.prev() && currSelected.prev().hasClass('elem')){
            currSelected.prev().addClass('selected');
            currSelected.removeClass('selected');   
        }
    }else if(e.keyCode == "39"){ //right, select next
        if(currSelected.next() && currSelected.next().hasClass('elem')){
            currSelected.next().addClass('selected');
            currSelected.removeClass('selected');   
        }
    }else if(e.keyCode == "13"){ //enter
       $('.entered').remove();
       $(document.body).append(currSelected.clone().addClass('entered'));
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

捕获按键以过滤元素 的相关文章

随机推荐

  • 有没有使用 Java 访问 Windows COM 方法的方法?

    我有一个应用程序 它利用 JNA 来调用 C 硬件抽象库中的函数 支持的硬件设备之一需要初始化 Windows COM 子系统 通过 CoInitialize 或 CoInitializeEx 有谁知道有什么 Java 库可以做到这一点吗
  • 将一个 div 垂直居中对齐到另一个 div 中

    说我有 div class outer div class inner some stuff div div 内部 div 具有动态高度 它根据 div 内部的内容而变化 外部 div 只是一个容器 设置为具有窗口的高度 我想将其设置为使内
  • PHPUnit 和来自 Guzzle 的模拟请求

    我有一堂具有以下功能的课程 public function get string uri stdClass this gt client new Client response this gt client gt request GET u
  • Typescript / 类型安全柯里化函数

    如何在打字稿中安全地输入柯里化函数 特别注意以下示例 interface Prop
  • 如何使用 xcode 3.1.3 处理 iAd

    目前我正在集成 iAds 并制作该应用程序的精简版 我的问题是以前我使用的 iAds 是 xcode 4 1 3 但目前我使用的是 xcode 3 1 3 iAds 不支持我们所做的 请帮助我 NSString contentSize UI
  • 是什么导致了 gcc 中的模糊重载?

    include
  • 重置主键

    我试图找到在线执行此操作的答案 但显然无法完成 我的意思是在应用程序级别 而不是数据库级别 我需要完全清除我的数据集并同时重置主键 有任何想法吗 或者 我可以使用的一种技巧是重新初始化数据集 但这似乎也不可能 因为数据集在应用程序中的不同类
  • ROWID 整数主键自动增量 - 如何插入值?

    我用 Java 创建了一个 SQLite 表 create table participants ROWID INTEGER PRIMARY KEY AUTOINCREMENT col1 col2 我尝试添加行 insert into pa
  • spawn 和 post 如何与 asio 一起工作?

    I asked this question https stackoverflow com questions 61026135 asio use future instead of yieldec and comments lead to
  • Chrome DevTools:Html 元素悬停不起作用

    我遇到这个问题已经有一段时间了 我的 chrome 开发工具有一个奇怪的行为 由于某些不明原因 悬停和突出显示元素不起作用 请看下面的 gif 当我展开特定元素时 它会破坏开发工具 我真的不明白这是从哪里来的 我和朋友比较了设置 我们有相同
  • 有没有办法使值只能由嵌套类 VB.NET 的父级访问?

    总的来说 根据OOP范式 我对封装的理解基本上是这样的 如果成员是私有的 则只能由类访问 如果成员受保护 则只能由基类和任何派生类访问它 如果成员是公开的 则任何人都可以访问 如果我有一个嵌套类 我可以声明一个属性只能由该类及其嵌套的父类访
  • 在 Tensorflow2 中将图冻结为 pb

    我们通过图形冻结保存来自 TF1 的许多模型 tf train write graph self session graph def some path get graph definitions with weights output g
  • 相当于 scala 中的 python repr()

    有没有相当于Python的东西reprscala 中的函数 即 您可以给任何 scala 对象提供一个函数 它将生成该对象的字符串表示形式 该对象是有效的 scala 代码 eg val l List Map 1 gt a print re
  • 如何使用 WinAPI 读取 MessageBox 文本

    如何读取标准Win消息框 Info 的消息 Using SendMessage this HandleControl WM GETTEXT builder Capacity builder 我只能读取消息框的标题或按钮的文本 但不能读取消息
  • 正在解除分配时尝试加载视图控制器的视图... UISearchController

    我有创建一个的代码UISearchController in my UIVIew sviewDidLoad self resultSearchController let controller UISearchController sear
  • 如何在 Android 手机中制作自己的自定义拨号器

    在我的应用程序中 我添加了一个意图 以便用户可以调用 str tel phoneArray 11 Intent intent new Intent Intent ACTION CALL intent setData Uri parse st
  • Listen() 忽略积压值

    我认为 backlog决定了的大小连接队列 届时任何大于此大小的额外请求都将被丢弃 这个说法对吗 现在我有非常简单的程序server c socket bind listen 5 while 1 accept read write slee
  • JBoss AS 7 禁用热部署

    在以前的版本中 您只需禁用conf jboss service xml 中的ScanEnabled 属性即可 我想知道如何在 JBoss 7 上禁用此功能 Thanks 您只需删除部署扫描器子系统即可 Remove
  • 如何将数据从广播接收器发送到片段?

    如何将数据从广播接收器发送到片段 这里我想将电话号码 OriginatingAddress 发送到另一个片段 public void onReceive Context context Intent intent Bundle intent
  • 捕获按键以过滤元素

    我正在创建一个