【发布时间】:2014-12-24 00:00:43
【问题描述】:
我正在将选项动态加载到 HTML5 datalist 元素中。但是,浏览器会在选项加载之前尝试显示datalist。这会导致列表不显示或有时显示部分列表。加载选项后,有什么方法可以通过 JavaScript 刷新列表?
HTML
<input type="text" id="ingredient" list="ingredients">
<datalist id="ingredients"></datalist>
JavaScript
$("#ingredient").on("keyup", function(event) {
var value = $(this).val();
$.ajax({
url: "/api/ingredients",
data: {search: value.length > 0 ? value + "*" : ""},
success: function(ingredients) {
$("#ingredients").empty();
for (var i in ingredients) {
$("<option/>").html(ingredients[i].name).appendTo("#ingredients");
}
// Trigger a refresh of the rendered datalist
}
});
});
注意:在 Chrome 和 Opera 中,仅当用户在输入文本后单击输入时才会显示整个列表。但是,我希望整个列表显示为 用户类型。 Firefox 不是问题,因为它似乎会在更新选项时自动刷新列表。
更新
我不确定这个问题是否有令人满意的答案,因为我相信这只是某些浏览器的缺点。如果更新了datalist,浏览器应该刷新列表,但有些浏览器(包括 Chrome 和 Opera)根本不这样做。黑客?
【问题讨论】:
-
你不能在页面加载时隐藏或禁用列表,获取选项,然后取消禁用/取消隐藏列表吗?
-
@Thijs:我正在更新
keyup事件的列表,所以它非常动态。我已经更新了我的问题以反映这一点。 -
也许总是显示一个项目,上面写着“正在加载...”或某种旋转图像?
-
我找到了这个例子raymondcamden.com/2012/6/14/…,但我不知道它是否对你有帮助。
-
谢谢@Ragnar。他的解决方案遇到了同样的问题。如果您打开他的演示然后键入“mo”,然后按退格键,列表将无法及时更新(但如果您检查元素,
datalist已 已更新)。不过在 Firefox 中运行良好。
标签: javascript jquery ajax html html-datalist