是否可以将用户的选择限制为Bootstrap Typeahead项的预定义数据源项?那么,如果用户输入了不在数据源中的内容,就会显示一条消息来通知他们?
发布于 2012-12-06 12:59:51
如果我理解的话,当typeahead组件失去焦点时,如果它不在列表中,应该提醒用户它的输入是无效的?
因此,代码如下所示:
var myData = [...]; // This array will contain all your possible data for the typeahead
$("#my-type-ahead").typeahead({source : myData})
.blur(validateSelection);
function validateSelection() {
if(source.indexOf($(this).val()) === -1)
alert('Error : element not in list!');
}
但要注意的是,IE6-8中并没有实现indexOf
。但是可以找到填充符,例如:Best way to find if an item is in a JavaScript array?。
发布于 2015-01-20 11:38:07
我遇到了同样的问题,但在我的情况下,我所有的数据都是remote。据我所知,Bloodhound没有任何好的钩子可以让你做到这一点,但你可以挂接到ajax complete回调中,手动构建一个有效的输入缓存,然后在更改/模糊时进行检查。
var myData = new Bloodhound({
remote: {
url: '/my/path/%QUERY.json',
ajax: {
complete: function(response){
response.responseJSON.forEach(function (item) {
if (myData.valueCache.indexOf(item.value) === -1) {
myData.valueCache.push(item.value);
}
});
}
}
}
});
myData.valueCache = [];
myData.initialize();
$('#artists .typeahead').typeahead(null, {
source: myData.ttAdapter()
}).bind('change blur', function () {
if (myData.valueCache.indexOf($(this).val()) === -1) {
$(this).val('');
}
});
发布于 2013-04-24 15:39:48
使用jquery和Samuel的解决方案,我认为你会克服IE的问题。将validateSelecion函数更改为:
function validateSelection() {
if ($.inArray($(this).val(), myData) === -1)
alert('Error : element not in list!');
}
剩下的就像Samuel指出的那样。
https://stackoverflow.com/questions/13743498
复制