2012-02-18 8 views
2

文字列比較関数でいくつかの問題があります。私はkeyupイベントを持つテキストボックスを持っています。キーが押されると、テキストボックスにあるものと値のリストを比較する関数を呼び出します。私は、ユーザーがボックスに単語を入力し、入力されたものと互換性のない選択肢をリストから削除することを許可できるようにしたい。は、入力時に文字列を比較します

jay 
    jason 
    jamie 
    jamu 
    jenny 
    sara 

を、ユーザーが入力することができ:私はこのリストを持っていた場合例えば、

'j' --> sara should be eleminated as a choice 
    'ja' --> sara and jenny should be eliminated 
    'jam' --> only jamie and jamu should be left 
    'jamu' --> should only leave jamu 

私が持っているコードは、文字ずつとしていない累積それに対するのようです。誰もが文字列をチェックするための良い方法のための任意の提案がありますか?

おかげ

  function filterByName(e){ 
     var key = window.event ? e.keyCode : e.which; 
    var keychar = String.fromCharCode(key); 
    fullString=fullString + keychar 
      ..... some other stuff 
      //iterate over list 
      var ul = document.getElementById("friendUl");   
    var liNodes = ul.getElementsByTagName("li"); 
    var nodeLength = liNodes.length 

    for (i=0;i<=nodeLength-1;i++){ 

      var getFNames= document.getElementsByName('fNames').item(i) 
    var getLNames = document.getElementsByName('lNames').item(i) 
    var fullNames = getFNames + " " + getLNames 

    for (j=0;j<=fullString.length-1;j++){ 
     if(fullString.charAt(j)== fullNames.charAt(j)){ 
      alert(fullNames) 
     } 
    } 
     } 
    } 

+0

'Array.filter'と' String.indexOf'を組み合わせて使用​​します。私の答えを見てください。 –

答えて

2

あなただけ与えられた名前がfullStringの値で始まるかどうかを確認したいように思えます。

if (fullName.indexOf(fullString) === 0) { 
    // It's still valid 
} else { 
    // It's not valid 
} 
0

このような文字列のオフ機能を定義します。

String.prototype.startsWith = function(val) { 
    return 0 == this.indexOf(val); 
}; 

そして、代わりにあなたがcharAt()を使用しているループのためのそれを使用しています。具体的には、これを置き換えます。これにより

for (j=0;j<=fullString.length-1;j++){ 
     if(fullString.charAt(j)== fullNames.charAt(j)){ 
      alert(fullNames) 
     } 
    } 

if (fullNames.startsWith(fullString)) 
    alert(fullNames); 
0

あなたが

fullstring = document.getElementById('TextBoxId').value; 

この方法をやるべき

fullString=fullString + keychar 

を行っているとき、あなたが占めますバックスペースなど。