我尝试通过使用jquery ajax调用更新数据列表本身,通过datalist更新html表单中的输入。在使用ajax的情况下,输入不显示选项,但是当我再次点击输入字段时,输入。没有ajax的静态测试版本按预期工作,在输入字段中输入时显示选项。使用datalist&ajax动态自动填充HTML5输入
HTML标记
<form id="formID" class="form-horizontal">
<div class="control-group">
<label class="control-label" for="input">Location</label>
<div class="controls">
<input type="text" list="LIST_CITIES" id="inputCity"
placeholder="Enter your location..">
</div>
</div>
<!-- submit -->
<button type="submit" class="btn">Submit</button>
</form>
<datalist id="LIST_CITIES"></datalist>
没有Ajax(没有工作):
$('.controls').on("input click", "#inputCity", function(e) {
var val = $(this).val();
dataList.empty();
if(val === "" || val.length < 3) return;
if(testObj.results.length) {
for(var i=0, len=testObj.results.length; i<len; i++) {
var opt = $("<option></option>").attr("value", testObj.results[i]['city']);
tempObj[testObj.results[i]['city']] = testObj.results[i]['id'];
dataList.append(opt);
}
}
});
与AJAX(不打字时工作):
$('.controls').on("input click", "#inputCity", function(e) {
var val = $(this).val();
dataList.empty();
if(val === "" || val.length < 3) return;
$.ajax({
type: "GET",
url: GET_cities,
data: {startswith: val, maxRows: 5},
success:function(data){
if(data.results.length) {
for(var i=0, len=data.results.length; i<len; i++) {
var opt = $("<option></option>").attr("value", data.results[i]['city']);
tempObj[data.results[i]['city']] = data.results[i]['id'];
dataList.append(opt);
}
}
}
});
你GET_cities网址是正确的吗?你的请求去服务器? – 2013-04-04 19:38:12
是的,我得到的格式与testobject相似。唯一的区别在于,第二个(ajax)解决方案在我输入输入字段时没有显示选项 – 2013-04-04 19:51:58
解决方法发布在这里:http://stackoverflow.com/questions/26610752/how-do-you-refresh -an-html5-datalist-using-javascript – Yoyo 2016-01-11 05:47:01