materialize autocompleteプラグインを使用して、複数のタグをオートコンプリートで作成しています。プラグインはうまく動作しますが、あらかじめ定義された配列として渡されたデータでのみ動作します。データがajax呼び出しから渡された場合、プラグインは結果がないかのようにオプション付きのドロップダウンを表示しません。結果は実際にはキャッシュされ(キャッシュオプションを使用して)、検索フレーズを再入力した後にのみドロップダウンとして表示されます。マテリアライズオートコンプリートajax
要約すると、オートコンプリートプラグインは、ajaxがリクエストを完了してデータを配信するのを待たず、最初の試行ではドロップダウンが表示されません。 これらのプラグインがajax呼び出しで取得されたら、このプラグインにドロップダウンの提案を表示する方法はありますか?
プラグインの初期化:DBから値を取得するための
autocomplete = $('#multipleInput').materialize_autocomplete({
cacheable: true,
throttling: true,
multiple: {
enable: true,
maxSize : 5
},
appender: {
el: '.ac-users'
},
dropdown: {
el: '#multipleDropdown'
},
getData: function (value, callback) {
callback(value,getAjaxDropdowValuesAutocomplete(value));
}
});
が機能:
function getAjaxDropdowValuesAutocomplete(value){
var returnArray = [],
dataArray,
innerObject = {},
postParamsObj = {"search" : value};
$.ajax({
type: "POST",
url: '/search-elements',
data: postParamsObj,
success: function(msg) {
dataArray = msg['data'];
for(var i = 0;i < dataArray.length; i++){
innerObject = {};
innerObject["id"] = dataArray[i][0];
innerObject["text"] = dataArray[i][1] + " " + dataArray[i][2];
returnArray.push(innerObject);
}
// returnArray format [{ 'id': '1', 'text': 'Johnny Bravo' }]
},
error : function(msg){
}
});
return returnArray;
}
このソリューションはうまくいくが、データ要求が送信されるたびにプラグインが破棄され初期化されるため不十分です。非同期的にデータを取得するメソッドgetDataがありますが、要求が完了するのを待たずに何か間違っている必要があります –
調整オプションがあります。 調整[boolean]:getData関数の調整またはそうでない場合、デフォルト:trueそれが期待どおりに機能するかどうかわからない – jwebb
あなたが正しいかもしれませんが、スロットリングオプションが機能していないようで、スロットル量などの追加パラメータはありません –