jQuery Devbridge autocomplete - 从列表中强制选择

时间:2015-04-09 15:11:56

标签: jquery jquery-autocomplete

我正在使用DevBridge jQuery自动完成,工作正常,但我想强制用户从下拉列表中选择一个选项。

有没有办法做到这一点?

var airports = [
    { value: 'Manchester (MAN)' },
    { value: 'Bangkok (BKK)' }, 
    { value: 'New York (JFK)' }
];

$('#autocomplete').autocomplete({
    lookup: airports
});

2 个答案:

答案 0 :(得分:2)

我使用的功能是carl_01@email.com

onInvalidateSelection

这对我来说最有效。

答案 1 :(得分:0)

这是我的做法:

  • 我将选定事件上的选定值保存到称为“ ac-selected-value”的HTML元素属性。
  • 对焦时,我检查该值是否与保存的值相同,以及是否清除该值

现在,我在此控件上找不到“挂载”或“初始化”事件(并且我认为它们应该添加一个),因此我更改了自动完成的初始化方式-我通过自己的函数来完成调用devBridgeAutocomplete并附加一个焦点侦听器:

$.MyNamespace.fs.autocomplete = function (elems, options) {
    elems.devbridgeAutocomplete(options);
    elems.focusout(function (e) {
        var txt = $(this);
        if (txt.attr("ac-selected-value") !== txt.val()) {                
            txt.val("");               
        }            
    });
};


...

// Set AC defaults:
$.Autocomplete.defaults.autoSelectFirst = true;
$.Autocomplete.defaults.onSelect = function (suggestion) {        
    $(this).attr("ac-selected-value", suggestion.value);   // stash a valid value here     
};
...  //  I also use this, but this alone will not get you far:
$.Autocomplete.defaults.onInvalidateSelection = function () {
    $(this).val("");
};

然后,在该行的某个地方,初始化一个像这样的字段:

$.MyNamespace.fs.autocomplete($("#select-something"), {
    serviceUrl: 'some-url'
});

如果您不想在某些元素上列出,则可以使用经典:

$("#select-something").devbridgeAutocomplete({
    serviceUrl: 'some-url'
});

HTH