2013-09-23 115 views
0

我對JavaScript和jquery比較陌生。現在我有一個txt文件中的單詞列表。我將這個列表存儲在一個數組中,我想將該數組的內容與某些用戶輸入進行比較。如果匹配,應該顯示該特定字。Javascript/jQuery比較數組輸入值

我也使用執行一些typeahead功能來預測用戶想要搜索哪些單詞。

在當前階段,我的函數在第一個輸入字符上查找匹配項。當使用更多字符時,該函數返回未找到匹配項。這是爲什麼?

這裏是我的HTML:

<div class="container"> 

    <div class="appwrapper"> 
    <div class="content"> 
     <h3>OpenTaal Woordenboek</h3> 
     <p>Voer uw zoekopdracht in:<p> 
     <p><input name="searchinput" id="searchinput" data-provide="typeahead" type="text" placeholder="Zoeken..."> 
    <p class="dict"></p> 
    </div> 
    </div> 

</div> <!-- /container --> 

而這裏的jQuery的:

<script src="bootstrap/js/jquery.js"></script> 
<script src="bootstrap/js/bootstrap-typeahead.js"></script> 

<script type="text/javascript"> 
var data; 
var myArray = []; 
var txtFile = new XMLHttpRequest(); 
     txtFile.open("GET", "OpenTaal-210G-basis-gekeurd.txt", true); 
     txtFile.onreadystatechange = function() { 
    if (txtFile.readyState === 4) { // Makes sure the document is ready to parse. 
      if (txtFile.status === 200) { // Makes sure it's found the file. 
      allText = txtFile.responseText; 
      data = txtFile.responseText.split("\n"); // Will separate each line into an array 
      myArray = [data]; 
     } //"\r\n" 
    } 
} 
//console.write(data); 

searchinput.onkeypress = function() { 
//alert("The function is working!"); 
var formInput = document.getElementById("searchinput").value; 

    if (myArray == formInput) { 
    alert("There's a match!"); 
    $('.dict').append('<div class="result">' + myArray + '</div>') 
    } else { 
     alert("No match has been found.."); 
    } 
}; 

+0

您有意將整個'myArray'與單個formInput進行比較'價值? – Blazemonger

+0

我想我必須遍歷myArray來搜索匹配。但我不知道如何做到這一點在javascript – Forza

+2

只是一個提示......如果你使用jQuery,你最好用jQuery代碼替換你的XMLHttpRequest(例如$ .ajax) –

回答

2

你沒有使用jQuery,只是原生的JavaScript。

腳本讀取文件後,只是做:

$(searchinput).on("keypress", function() { 
    if ($.inArray(formInput,myArray) > -1) { 
     alert("There's a match!"); 
    } 
}); 

UPDATE

$(searchinput).on("blur", function() { 
    if ($.inArray(formInput,myArray) > -1) { 
     alert("There's a match!"); 
    } 
}); 
+0

嗯謝謝你:)這工作像一個魅力! – Forza

+0

我現在確實遇到了一個問題,它會爲我輸入的每個字符的段落添加匹配項。你知道我該如何避免這種情況? – Forza

+0

只需從您的段落 –

2

您需要搜索整個數組,而不是僅僅把它比作值:

if ($.inArray(formInput,myArray)>=0) { // returns -1 if no match 
    alert("There's a match!"); 

http://api.jquery.com/jQuery.inArray/

+0

Thx提及inArray。這是一個很好的記住:) – Forza

0

循環遍歷數組和匹配數組元素,如輸入值:

for(var i in myArray) { 
     var arrayElement = myArray[i]; 
     if (arrayElement == formInput) { 
      //Do your stuff 
     } 
    }