2009-05-11 11 views

答えて

6

解析オプション(データ解析を処理する関数)を提供し、解析結果が返されないとき。

この例では、FullName属性とAddress属性を含むJSONオブジェクトの配列を取得していることを前提としています。

$('#search').autocomplete({ 
     dataType: "json", 
     parse: function(data) { 
     var array = new Array(); 
     if (!data || data.length == 0) { 
      // handle no data case specially 
     } 
     else { 
      for (var i = 0; i < data.length; ++i) { 
       var datum = data[i]; 
       array[array.length] = { 
             data: datum, 
             value: data.FullName + ' ' + data.Address, 
             result: data.DisplayName 
            }; 
      } 
     } 
     return array; 
     } 
    }); 
+0

hmmm nice idea thanks dude! –

+0

万人のおかげで、ありがとうございます! –

+0

ニース、私をたくさん助けました:D – Mert

9

この質問が古くなって本当に私は新しいjQueryのUI 1.8.16で働いている、とにかく、オートコンプリートは今かなり異なっている:http://jqueryui.com/demos/autocomplete/#default

とにかくあなたがしようとしている場合質問と同じことは、検索結果で呼び出される関数がないことを知る限り、解析関数はもうありません。

私はこれをやってのけるために管理方法は、オートコンプリートのフィルタ機能をオーバーライドしている - 注意:これは、すべてあなたのオートコンプリートに影響します

$.ui.autocomplete.filter = function(array, term) { 
      var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i"); 

      var aryMatches = $.grep(array, function(value) { 
       return matcher.test(value.label || value.value || value); 
      }); 

      if (aryMatches.length == 0){ 
       aryMatches.push({ 
        label: '<span class="info" style="font-style: italic;">no match found</span>', 
        value: null 
       });      
      } 

      return aryMatches; 
     }; 

機能は少しソースから変更され、grepの呼び出しは同じです結果がない場合はnullの値を持つオブジェクトを追加して、選択呼び出しをオーバーライドしてnull値をチェックします。

これは、入力を続けても一致するものが見つからない場合、ドロップダウンに「一致するものは見つかりません」という項目が表示されます。これは非常にクールです。選択呼び出しを無効にするために

jQuery UI Autocomplete disable Select & Close events

$(this).data('autocomplete').menu.options.selected = function(oEvent, ui){ 

      if ($(ui.item).data('item.autocomplete').value != null){ 
       //your code here - remember to call close on your autocomplete after 


      } 
     }; 

を参照してください、私はページ上のすべての私のオートコンプリートでこれを使用するので、値は最初のnullであるかどうかをチェックしてください!あなたがそこにないキーを参照しようとする前に。

+0

ハハ私はその年前に質問しましたが、私は今よりはるかにエレガントなパターンでこれをやり遂げると確信していますが、とにかく感謝します –

2

私は(メッセージが自動補完リストに示されている)同じ目的のために、次のコードを使用しています:

success: function(data, status, xhr){      
    if(!data.length){ 
     var result = [ 
      { 
       label: 'There are no matches for your query: ' + response.term, 
       value: response.term 
      } 
     ]; 
     response(result); 
    } 
    else{ 
     // normal response 
    } 
} 
2

ます。また、これを調べるために、「応答」イベントを利用することができます。シンプルだがパワフル。 http://api.jqueryui.com/autocomplete/#event-response

response: function (event, ui) { 
      if (ui.content.length == 0) { 
       //Display an alert or something similar since there are no results 
      } 
     }, 
関連する問題