2012-02-18 56 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'來完成它。看到我的答案。 – 2012-02-18 18:47:14

回答

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循環。具體來說,替換此:

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=fullString + keychar 

你應該做

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

這樣,你佔了退格等...