0

我有一个自动完成小部件绑定到数据源,如下所示:

<input data-filter="contains" data-role="autocomplete" data-bind="source: styleData" data-text-field="style" id="style-name" />

我在数据源中有以下项目:

  • ABC123
  • 123AC
  • ZZZ

当我在“自动完成”框中键入 A 时,它会按预期自动过滤掉最后一项。然后如果我点击 B,第二个项目也会被过滤掉。如果我然后按退格键,第二个项目会重新出现。然而,使用最后的退格键,第三项不会出现。$('#style-name').getKendoAutoComplete()的值解析为空字符串,但数据源的过滤器仍然{field: 'style', logic: 'contains', value: 'A'}列出。

我已经在 Windows 8.1 Update 1 上的 Firefox 30 和 IE11 上进行了测试,两者都给出了相同的结果。

4

2 回答 2

1

这是因为

data-min-length="1"

此属性仅在您至少输入一个字符时触发自动完成。

如果您想显示所有结果而不是最少 1 个字符,那么您可能正在寻找一个 ComboBox。

于 2014-06-17T21:13:58.987 回答
0

所以我花了一些时间仔细阅读源代码,我猜想这个功能是由搜索功能中的以下几行表示的(kendo.autocomplete.js,2014 年第一季度,第 301 行):

if (!length) {
    that.popup.close();
} else if (length >= that.options.minLength) {
    that._open = true;

    that._filterSource({
        value: ignoreCase ? word.toLowerCase() : word,
        operator: options.filter,
        field: options.dataTextField,
        ignoreCase: ignoreCase
    });
}

!length of 0 计算结果为 true 并在不更改过滤器的情况下关闭弹出窗口。我打算将 _filterSource 行移到条件之外来解决问题。

于 2014-06-18T14:22:15.763 回答