jQuerys .autocomplete()
関数には、「ソース」オプションの2つのバリエーションがあります。
文字列の配列:
[ "Choice1", "Choice2" ]
labelおよびvalueプロパティを持つオブジェクトの配列:
[ { label: "Choice1", value: "value1" }, ... ]
これらは両方とも、関数に直接渡されたときに正常に.autocomplete()
機能します。
$('input').autocomplete({source: [ "Choice1", "Choice2" ], minLength: 0});
また
$('input').autocomplete({source: [ { label: "Choice1", value: "value1" } ], minLength: 0});
しかし、変数として渡された場合、どちらも機能しません。
var source = '[ "Choice1", "Choice2" ]';
$('input').autocomplete({source: source, minLength: 0});
これは、変数を文字列に暗黙的にキャストすることと関係があります。オートコンプリートは、変数からの値を、AJAX source
(文字列である)の処理方法と同じように扱います。
最終的には、input要素JSON
の属性からの値を使用したいと思います。data-json
追加の関心のために:
$('input').autocomplete({source: $('input').data('json'), minLength: 0});
最初のバリアントでは完全に機能しますが、2番目のバリアントでは文字列の動作に戻ります。
どちらのバリアントでも使用$('input').attr('data-json')
は機能しません。
両方のバリアントで機能する「ハック」は、これを行うことです。
$('input').autocomplete({source: eval($('input').attr('data-json')), minLength: 0});
2番目のバリアントで明らかに有効なものをオブジェクトとして.data()
返すことができるものを見逃しましたか?JSON
eval()
別の方法はありますか、それとも、それはおそらく良いことではないという周りのすべての知恵にもかかわらず、私はただ和解する必要がありますか?
あなたの考えをありがとう..