引导类型只允许列表值

是否可以将用户的选择限制为Bootstrap Typeahead项目的预定义数据源项目? 因此,如果用户键入不在数据源中的内容,则会显示一条消息,通知他们这样的内容?

这里是演示:http://cruiseoutlook.com/test


如果我明白,当类型组件失去焦点时,如果它不在列表中,应该提醒用户它的输入无效?

代码将因此是这样的:

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!');
}

只是要小心有关事实indexOf不IE6-8实现。 但是可以找到垫片,例如:找到某个项目是否在JavaScript数组中的最佳方法? 。


我遇到了同样的问题,但在我的情况下,我的所有数据都很遥远 。 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('');
    }
});

使用jquery和Samuel的解决方案,我认为你会克服IE问题。 将您的validateSelecion函数更改为:

function validateSelection() {
    if ($.inArray($(this).val(), myData) === -1) 
        alert('Error : element not in list!');
}

正如塞缪尔指出的那样离开休息。

链接地址: http://www.djcxy.com/p/74955.html

上一篇: Bootstrap Typeahead Only Allow List Values

下一篇: Is element in array js