2012-01-26 8 views
1

このjsonデータをjqueryオートコンプリートのデータソースとして使用するにはどうすればよいですか?jsonデータでjQueryオートコンプリートコントロール内のキー値を設定するにはどうすればよいですか?

[{"uid":"123","UserName":"xxx"},{"uid":"124","UserName":"yyy"}] 


<script src="jquery-1.7.1.min.js" type="text/javascript"></script> 
<script src="jquery.ui.core.js" type="text/javascript"></script> 
<script src="jquery.ui.position.js" type="text/javascript"></script> 
<script src="jquery.ui.widget.js" type="text/javascript"></script> 
<script src="jquery.ui.autocomplete.js" type="text/javascript"></script> 

<input name="Txt1" type="text" id="Txt1"> 

<script language="javascript" type="text/javascript"> 
$("#Txt1").autocomplete(
{ 
    source:[{"uid":"123","UserName":"xxx"},{"uid":"124","UserName":"yyy"}] 
} 
) 
</script> 
+0

このJSONはajaxコールから来ていますか? –

+0

はいそれはajaxの呼び出しから来ます –

答えて

2

私が発見しましたカスタム戻り値のベストプラクティスは、解析関数を作成することです。これにより、返されたJSONで必要な処理を行うことができます。このサンプルコードでは、私はajax呼び出しに対処しませんが、必要に応じて追加することもできます。 jQuery UIオートコンプリートは、ラベルと値エンティティを探します。あなたは、どちらかを適切に見えるように置くことができ、必要に応じてカスタムメイドもできます。明確さの便宜上

var myStuff = [{ 
    "uid": "123", 
    "UserName": "xxx"}, 
{ 
    "uid": "124", 
    "UserName": "yyy"}]; 

function imAutocompleteJSONParse(data) { 
    var rows = []; 
    var rowData = null; 
    var dataLength = data.length; 
    for (var i = 0; i < dataLength; i++) { 
     rowData = data[i]; 
     rows[i] = { 
      label: rowData.UserName, 
      value: rowData.UserName 
     }; 
    } 
    return rows; 
} 

$("#Txt1").autocomplete({ 
    source: function(request, response) { 
     var rows = imAutocompleteJSONParse(myStuff); 
     return response(rows); 
    }, 
    minLength: 2 
}); 

あなたが働いてそれを見ることができますので、私はフィドルページでこれを置く:NOW http://jsfiddle.net/MarkSchultheiss/TRKeE/

私はあなたの結果といくつかのカスタム/違うものをやりたい疑うよう、私が持っています、カスタム値の操作方法に関するこのカスタム例を作成しました:http://jsfiddle.net/MarkSchultheiss/TRKeE/2/

違いは、私は解析関数を変更し、新しいオートコンプリートオプションを追加しました。

var myStuff = [{ 
    "uid": "123", 
    "UserName": "xxx"}, 
{ 
    "uid": "124", 
    "UserName": "yyy"}]; 

function imAutocompleteJSONParse(data) { 
    var rows = []; 
    var rowData = null; 
    var dataLength = data.length; 
    for (var i = 0; i < dataLength; i++) { 
     rowData = data[i]; 
     rows[i] = { 
      uid: rowData.uid, 
      UserName: rowData.UserName, 
      label: rowData.UserName, 
      value: rowData.uid 
     }; 
    } 
    return rows; 
} 

$("#Txt1").autocomplete({ 
    source: function(request, response) { 
     var rows = imAutocompleteJSONParse(myStuff); 
     return response(rows); 
    }, 
    select: function(event, ui) { 
     var hasValue = (ui.item.value != undefined && ui.item.value != "" && ui.item.value != null); 
     if (hasValue) { 
      var focusedElement = $(this); 
      focusedElement.val(ui.item.label); 
      $('#labelResult').text(ui.item.label); 
      $('#valueResult').text(ui.item.label); 
      $('#customResult').text(ui.item.uid + ":" + ui.item.UserName); 

      return false; 
     } 
     else { 
      return false; 
     } 
    }, 
    minLength: 2 
}); 
+0

ありがとうございます。私がtextBoxに入力すると、すべてのitems.itに一致する項目だけが表示されます。 –

+0

はい、これは結果配列を処理する方法によるものです。入力したテキストに基づいて送信する前に、結果をフィルタリングします。アレイに.push()を使用することができます。たとえば、配列をあらかじめロードしておきたい場合などです。私の場合は、何万という結果があり、フィルタ側でサーバ側で処理する必要があります。 –

+0

ありがとうございます - 選択イベントとキーの組み合わせ、値のビットは本当に私にとって役に立ちます。 –

-1
本当にシンプル

$('#Txt1').autocomplete({source: 'URL to your JSON file/script'});

、あなたのコードは本当に奇妙であり、あなたが使用して文字列としてJSONを追加したい場合は

$('#Txt1').autocomplete({source: $.parseJSON(your_string) });

+0

私は直接データソースとしてjsonにURLを与えたい場合はどうすればよいですか? –

関連する問題