2013-10-25 26 views
0

我有一个typeAhead函数(使用twitter typeahead库),当我键入第一个字母时,它会加载一组json文件。我怎样才能得到typeAhead每次在第一个按键上工作

这些JSON文件被命名为“words_a.json”,“words_b.json”等,它们含有每荷兰语单词以字母A,B,C开始,等

我现在面临的问题是:

1)只要在'#search-box'中键入第一个字符,输入字段的焦点就会丢失。这是由于'jquery.one()'功能。有什么办法可以防止这种情况发生?

2)我不能使用'jquery.keypress()',因为它会调用你输入的每个字符的json文件。我只想调用第一个字符的json文件。它应该加载以该字符开头的所有单词。

3)'jquery.one()'的另一个缺点是,只要我找到了我正在寻找的单词,我想开始寻找一个新单词。所以我删除了输入字段中的每个字符。但是,它不会为你输入的第一个字符加载另一个json文件,因为'jquery.one()'已经激活了一次,并且已经加载了一个json文件。有什么办法可以避免这种行为,并且当所有字符从输入字段中删除时再次启动该功能?

这里是我的代码:

<script> 
     $(document).ready(function() { 

       $('#search-box').one('keyup', function() { 
        var character = $('#search-box').val().substring(0, 1); 
        var chr = character.toLowerCase(); 
        //console.log(chr); 

        $.getJSON('words/words_' + chr + '.json', function(wordsArray){ 
         //console.log(wordsArray); 
         $('#search-box').typeahead({ 
         name: 'words', 
         //local: [], 
         local: wordsArray, 
         limit: 10 
         }); // close typeAhead function 
        }); // close getJSON 
       }); // close search-box keyup function 

      $('#search-box').bind('typeahead:selected', function(obj, value) { 
       //console.log(value.value); 
       $('#resultaten').append('<a href="#" onClick="speak(&quot;'+value.value+'&quot;, &quot;nl&quot;)">' + value.value + '\ 
     &nbsp;<img src="img/speaker.png" alt="speaker"/></a><br />'); 

      }); //close typeahead selected selected function 
      $('#search-box').typeahead().destroy(); 
     }); // close document.ready 
</script> 


<form class="form-search"> 
    <h2 class="form-search-heading">Zoek in OpenTaal woordenlijst</h2> 
    <input type="text" class="input-block-level" placeholder="Zoekterm" id="search-box"> 
    <div id="resultaten"></div> 
</form> 

回答

0

你可能想看看这个:http://oak.cs.ucla.edu/cs144/projects/javascript/suggest1.html

它有一个JSON列表,它使用一个按键。但是,如果仅用于第一个字符,提前输入有什么好处?说这些是名字,你有10个“史密斯”?你可能想输入“Smith”来获得第一个。

无论如何,您总是可以添加一个“if”语句来计算文本框中值的长度。例如,如果$(this).val().length > 1,你什么都不做。 else,你用你的支票前进。

相关问题