jQuerys .autocomplete()
函数的“源”选项有两种变体。
字符串数组:
[ "Choice1", "Choice2" ]
具有标签和值属性的对象数组:
[ { 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
字符串(字符串)的方式相同。
最终我想使用输入元素属性中的JSON
值。data-json
为了增加兴趣:
$('input').autocomplete({source: $('input').data('json'), minLength: 0});
第一个变体完美地工作,但恢复到第二个变体的字符串行为。
使用$('input').attr('data-json')
不适用于任何一种变体。
对这两种变体都有效的“hack”是这样做的:
$('input').autocomplete({source: eval($('input').attr('data-json')), minLength: 0});
我是否错过了一些允许将第二个变体中.data()
明显有效JSON
的对象作为对象返回的东西?
还有另一种方法,还是我只需要和平相处,eval()
尽管周围有很多智慧,这可能不是一件好事?
谢谢你的想法。。