2012-05-05 39 views
9

如何啓用精確匹配從字符串開始使用jquery自動完成與簡單數組的輸入?自動完成完全匹配從開始使用jquery自動完成從簡單的數組

如果我有一個數組如下:

  • 智能
  • oversmart
  • 創意無限
  • undersmart
  • verysmart

如果我打字「SMA。 ..」在文字輸入,我必須只顯示聰明,創意無限,而不是其他。

+0

的可能重複記錄的方式[jQuery的自動完成插件搜索配置(HTTP:/ /stackoverflow.com/questions/2382497/jquery-autocomplete-plug-in-search-configuration) – j08691

回答

12

你只需要修改源參數作爲一個功能,以滿足您的需求。就像這樣:

http://jsfiddle.net/UKgD6/


更新:添加代碼回答:

var acList = ['smart', 'oversmart', 'smartland', 'undersmart', 'verysmart']; 
$('#ac').autocomplete({ 
    source: function (request, response) { 
     var matches = $.map(acList, function (acItem) { 
      if (acItem.toUpperCase().indexOf(request.term.toUpperCase()) === 0) { 
       return acItem; 
      } 
     }); 
     response(matches); 
    } 
}); 
+0

真棒...這就像一個魅力,正是我正在尋找與jquery自動完成 - 謝謝! –

1

您可以使用正則表達式將輸入的子字符串與數組中的值匹配。

0

jQuery有太多的插件。只是撒上少許正則表達式就可以寫這樣的事情(我沒有測試,但我以前做過類似的東西):

$('#someTextInput').keyup(function(){ 
    var regExMatch = new RegEx('^' + $(this).val()); 
    $_LIs = $('#someUl li'); 
    $_LIs.hide(); 
    $_LIs.each(function(){ 
     if(this.innerText.match(regExMatch)) { $(this).show(); } 
    }); 
}); 

您可以刪除在new RegEx參數'^' +恢復您的行爲「重新作爲描述有問題的。 '^'表示開頭的行/串的選擇,這樣的「不匹配,除非它是在開始。

+0

埃裏克 - 謝謝你,我會記住這一點和調整,看看它是如何適應的autcomplete內... –

0

這已經改變,因爲以前的答案被接受。現在有一個lookupFilter選項來做到這一點,它要簡單得多。從https://stackoverflow.com/a/23239873/1204434,只需添加到您的選項列表:

lookupFilter: function (suggestion, originalQuery, queryLowerCase) { 
       return suggestion.value.toLowerCase().indexOf(queryLowerCase) === 0; 
      }, 
2

要做到這一點是在http://api.jqueryui.com/autocomplete/

<script> 
    var tags = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ]; 
    $("#autocomplete").autocomplete({ 
     source: function(request, response) { 
       var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i"); 
       response($.grep(tags, function(item){ 
        return matcher.test(item); 
       })); 
      } 
    }); 
</script>