2014-03-27 39 views
1

我试图通过项目数组来循环,看看是否有任何匹配,然后显示它们。那么,如果我输入任何他们都显示的角色。从输入和获取所有匹配的循环数组

(sensitive == false ? RegExp('^'+this.value,'i').test(source[i]) : RegExp('^'+this.value).test(source[i])) 

这是我的情况下,虽然如果this.value = a阵列(source[i])在每一个项目显示出来。有没有办法让这个更严格?

如果阵列(使用jquery自动完成例如阵列)

var availableTags = [ 
    "ActionScript", 
    "AppleScript", 
    "Asp", 
    "BASIC", 
    "C", 
    "C++", 
    "Clojure", 
    "COBOL", 
    "ColdFusion", 
    "Erlang", 
    "Fortran", 
    "Groovy", 
    "Haskell", 
    "Java", 
    "JavaScript", 
    "Lisp", 
    "Perl", 
    "PHP", 
    "Python", 
    "Ruby", 
    "Scala", 
    "Scheme" 
]; 
element.addEventListener('keypress', function (e) { 
    var dd = document.getElementById('fake_dropdown'); 
    for (i = 0; i < availableTags.length; i++) { 
     var li; 
     if ((sensitive == false ? RegExp('^' + this.value, 'i').test(availableTags[i]) : RegExp('^' + this.value).test(availableTags[i]))) { 
      li = document.getElementById('auto_id_' + (i + 1)); 
      li.style.display = "block"; 
     } else { 
      li = document.getElementById('auto_id_' + (i + 1)); 
      li.style.display = "none"; 
     } 
     var liLoop = dd.getElementsByTagName('li'); 
     for (var j = 0; j < liLoop.length; j++) { 
      if (liLoop[j].style.display == "block") break; 
      else dd.style.display = "none"; 
     } 
    } 
}, false); 

修订多个码

所有这些显示。为什么是这样?另外为什么BACKSPACE不被认为是一个按键,因为如果我点击退格,它不会重新评估条件。

+2

您可以共享的结果是如何获得 –

+0

呀抱上我会添加更多更多的代码。这只是非常非常冗长的 – EasyBB

+0

和html也 - 如果可能的话在http://jsfiddle.net/arunpjohny/ZUY2n/1/ –

回答

2

el.addEventListener('focus', function (e) { 
    lastIndex = this; 
    if (typeof focus == 'function') focus.call(this, this); 
}, false); 
//use keyup handler since keypress will not be fired for unprintable characters 
//don't register the handler inside the focus handler since it can cause multiple event registrations 
el.addEventListener('keyup', function (e) { 
    var dd = document.getElementById('fake_dropdown'), 
     items = 0; 
    var top, left, height, width, bottom; 

    var term = this.value, 
     //move this out out the for loop 
     regex = (sensitive == false ? new RegExp('^' + this.value, 'i') : new RegExp('^' + this.value)); 

    for (i = 0; i < source.length; i++) { 
     var li = document.getElementById('auto_id_' + (i + 1)); 
     if (regex.test(availableTags[i])) { 
      li.style.display = "block"; 
      items++; 
     } else { 
      li.style.display = "none"; 
     } 
    } 
    if (items == 0) { 
     dd.style.display = "none"; 
    } else { 
     top = el.offsetTop 
     left = el.offsetLeft; 
     height = el.offsetHeight; 
     width = el.offsetWidth; 
     bottom = top + height; 
     dd.style.left = left + 'px'; 
     dd.style.top = bottom + 'px'; 
     dd.style.width = width + 'px'; 
     dd.style.display = "block"; 
    } 
}, false); 

演示:Fiddle

相关问题