2013-09-23 83 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 
     } 
    }