首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onkeydown和自动完成

onkeydown和自动完成
EN

Stack Overflow用户
提问于 2016-09-12 06:24:01
回答 1查看 49关注 0票数 0

我想知道是否有人能帮我解决这个问题,或者给我指明正确的方向。

在我的项目中,我们有一个需要自动填充的字段,现在我使用onblur,它的效果很神奇,因为它只有在你离开焦点的时候才能做到。但是,由于最近的更改,只有当映射中只有一个唯一项与输入匹配时,它才需要这样做。

我有一个很大的数组,定义如下:

代码语言:javascript
复制
var myArray = [
[content, content],
[content, content],
...
]

后来在我的代码中,我将它与一个地图关联起来,至少这是我看到的大多数堆栈溢出问题所引用的内容,如下所示:

代码语言:javascript
复制
var myMap = {};

for(0 to myArray.length) {
   var a = myArray[i][0];
   var b = myArray[i][1];

   myMap[a] = b; 

}

现在,最后我迭代这个数组,如下所示:

代码语言:javascript
复制
for (var key in map) {
        if (map.hasOwnProperty(key)) {
            if (map[key].toLowerCase().indexOf(location.toLowerCase()) >= 0) 

上面的代码行是我正在努力弄清楚如何修改的代码。此时,在使用on blur时,如果我输入字母'A‘,并离开焦点区域,它会自动用某个名称填充它。但是,在数组中还有许多以A开头或包含A的其他对象,我如何更改它才能使onkeydown事件继续运行,直到它最终将其过滤为可能的键值对?我尝试查看MDN的过滤文档,但我不认为这能满足我的目的,或者至少我对JS太缺乏经验了。

EN

回答 1

Stack Overflow用户

发布于 2016-09-12 06:41:02

如果第一个和最后一个indexOf非负且相等,则只有一个。您可以使用&&和布尔短路求值来实现这一点,但这将在屏幕上运行得非常远,所以我使用另一个嵌套的if来显示您的代码(取决于您添加块的末尾)。但我们还需要查看是否有多个键匹配。

代码语言:javascript
复制
var matchCount=0;
for (var key in map) {
    if (map.hasOwnProperty(key)) {
        if (map[key].toLowerCase().indexOf(location.toLowerCase()) >= 0){ 
if (map[key].toLowerCase().indexOf(location.toLowerCase()) == map[key].toLowerCase().lastIndexOf(location.toLowerCase())) {
matchCount++;

然后在for循环之外:

代码语言:javascript
复制
if (matchCount==1){ //do your stuff
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39441224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档