我想在ajax结果之后或之后设置两个东西:此输入标记的值:
<input type="text" id="typeahead" name='name' placeholder='Name' class="form-control" data-provide="typeahead" autocomplete="off" />
以及此<li>
中的<ul>
代码列表:
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
test label
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1" id="name-dates-dropdown">
<li>test</li>
</ul>
</div>
这个想法是这样的:我在#typeahead输入标签上得到一个ajax结果列表(这很好用),如果我点击任何结果列表,这个项目被设置为这个文本输入的值,另一个ajax请求被触发(这也正常),第二个ajax请求(li列表)的结果被设置为新的#name-dates-dropdown innerHTML。可悲的是,设置功能都没有工作,我不知道为什么...... :(
我正在使用Bootstrap和Bootstrap typeahead。
这是我的jQuery函数:
<script type="text/javascript">
$(document).ready(function() {
$('#typeahead').typeahead({
source: function (query, process) {
$.ajax({
url: '/functions/name-autocomplete.php',
type: 'POST',
dataType: 'JSON',
data: 'query=' + query,
success: function(data) {
process(data);
}
});
},
displayText: function(item) {
return item
},
updater: function (item) {
$('#typeahead').val(item.value);
$.ajax({
url: '/functions/name-dates-autocomplete.php',
type: 'POST',
dataType: 'JSON',
data: 'query=' + item,
success: function(data) {
$('#name-dates-dropdown').html(data);
}
});
}
});
});
</script>
非常感谢!
答案 0 :(得分:0)
首先你得到一个初始化的插件,原始元素可能不是以前的功能。要设置#typeahead的值,请使用
$res = preg_replace('/,\s+(?=\d)/', ' ', $string);
这就是API所说的。
第二,如果你从你的第二个ajax调用中得到json就像这个结构
$('#typeahead').typeahead('val', item.value);
然后你可以遍历它并构建列表
// your ajax response
[
{"value":1,"title":"Whatever"},
{"value":2,"title":"Whatever 2"},
]
希望这有帮助。