聚合物纸输入 html 数据列表自动完成/建议列表

Posted

技术标签:

【中文标题】聚合物纸输入 html 数据列表自动完成/建议列表【英文标题】:polymer paper-input html datalist autocomplete/suggestions list 【发布时间】:2015-09-10 21:26:21 【问题描述】:

所以我在聚合物中使用了一种简单的自动完成方法

<paper-input autocomplete="on" name="stuff" list="stuffs"></paper-input>

带有一个简单的项目列表 (尝试了 selecttemplate 元素来做到这一点)

    <datalist id="stuffs">
        <option value="blah blah"/>
            .
            .
            .
    </datalist>

问题是,我想找到一种方法来访问在键入过程中出现的建议的动态下拉列表。 真的有办法吗?

【问题讨论】:

您能否阐明访问它的意思?你想达到什么样的行为? 喜欢将其打印在不同的区域而不是当前的下拉表单中 Are there any built in auto-complete input components for Polymer 1.0?的可能重复 【参考方案1】:

我认为你最好的选择是不使用datalist

这是我为自己使用而编写的组件示例:

<dom-module id="paper-autocomplete">
    <style>
    iron-collapse 
        box-shadow: 6px;
    

    paper-button 
        width: 100%;
        text-transform: none;
    
    </style>
    <template>
        <paper-input-container>
            <label>label</label>
            <content select=".content"></content>
            <input id="searchBox" class="paper-input-input" is="iron-input" bind-value="searchValue::input"></input>
        </paper-input-container>
        <iron-collapse id="collapse">
            <paper-material>
                <div>
                    <template id="resultList" is="dom-repeat" items="choices" filter="_listFilter">
                        <paper-item>
                            <paper-button on-tap="_selectItem">item.name</paper-button>
                        </paper-item>
                    </template>
                </div>
            </paper-material>
        </iron-collapse>
    </template>
</dom-module>
<script>
(function() 
    Polymer(
        is: "paper-autocomplete",
        properties: 
            choices: Array,
            label: String,
            value: 
                type: Object,
            ,
            searchValue: 
                type: String,
                value: '',
                observer: "_valueChanged"
            
        ,
        ready: function() 
            this.$.resultList.render()
        ,
        _valueChanged: function(e) 
            var collapse = this.$.collapse
            if (e != '' && !collapse.opened) 
                this.$.resultList.render()
                collapse.toggle()
             else
            if (e == '' && collapse.opened) 
                collapse.toggle()
            
        ,
        _listFilter: function(item) 
            return item.name.toLowerCase().includes(
                this.searchValue.toLowerCase()
            )
        ,
        _selectItem: function(event) 
            var collapse = this.$.collapse;
            this.set('searchValue', event.model.item.name)
            this.set('value', event.model.item)
            collapse.toggle()
        
    )
)()
</script>

_valueChanged 在输入时观察到searchValue 的变化并切换折叠。 _listFilter 根据searchValue 过滤绑定到dom-repeat 的项目。

#resultList#collapse 元素可以出于您自己的目的放置在其他地方。

编辑

我应该指出choices 这里是一个对象数组,每个对象都有一个名称属性,这是它们被过滤的方式。根据您要实现的目标,可以轻松地将其更改为过滤字符串数组。

【讨论】:

似乎没有任何方法可以导入 PolymerElement 组件,因此它们确实可以工作。 这些好东西应该先导入(使用适合您设置的路径): 【参考方案2】:

如果您更喜欢现成的 Polymer 元素,我建议您查看 https://vaadin.com/elements/-/element/vaadin-combo-box

【讨论】:

以上是关于聚合物纸输入 html 数据列表自动完成/建议列表的主要内容,如果未能解决你的问题,请参考以下文章

从自动完成列表提交查询,而无需点击提交按钮

html 使用datalist元素,HTML5允许您创建数据列表以自动完成输入字段。超级有用!这是一个示例代码

谷歌自动完成 - 输入选择

html 输入自动完成下拉列表

创建一个基本的自动完成建议列表

devbridge ajax 自动完成不会更新建议列表