javascript - 捕获按键以过滤元素

标签 javascript jquery string detection keypress

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

现在我想在打开新选择的情况下开始输入内容时过滤它。

Google Translate在语言选择器上执行。

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

我开始做某事:

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

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


重要:

  • 我没有 <input />检测 keypresskeyup上面的事件
  • 我不想创建这个 <input />因为我只想使用 <div>的和<a>在“新选择”上
  • 最近我需要使用箭头键在打开的选择上导航 + enter 以使用我的键盘选择选项

最佳答案

您可以通过“监听”窗口上按下的内容,然后检测按下的特定字母/字符串,搜索项目列表,如果发现它更改其 css 属性或添加新的“选定”类来实现此目的即 (demo => http://jsfiddle.net/steweb/mC6tn/ ..try press whatever :) and added after something found press left or right btns, or enter) :

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'));
    }
});

关于javascript - 捕获按键以过滤元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939047/

相关文章:

javascript - jQuery .html() 不会替换 javascript 图表

javascript - 如何访问在 php 标签内创建的文本框值以进行 ajax 调用

javascript - 在 JavaScript 类中调用嵌套函数

c - 理解C中的解引用运算符和指针,以及一个小程序的逻辑

javascript - Javascript 中类似 php 函数 substr() 的函数是什么

javascript - 如果验证失败则停止表单提交。

jquery - SP服务 : how to get a survey?

java - java/webservice(json) 中的字符串中的空格会产生不同的字节数组

C++ 字符串和数组

javascript - 在 Canvas 上绘制(重新加载)带有 cors = "anonimous"的图像(javascript)