当前位置: 首页 > 知识库问答 >
问题:

使用HTML5(datalist)自动完成与“包含”方法,而不仅仅是“开始与”

慕凌龙
2023-03-14

编辑:我做这个是为了说明我想要的:http://jsfiddle.net/rudiedirkx/r3jbfpxw/

  • HTMLWG在[list]
  • 上的规范
  • W3关于DataList
  • 的规范
  • DavidWalsh示例
  • 洪家关于行为的摘要..?

共有1个答案

孔宇
2023-03-14

“包含”方法

也许这就是你正在寻找的(问题的第1部分)。

它符合“从开始”的限制,并在选择时进行更改。

'use strict';
function updateList(that) {
    if (!that) {
        return;
    }
    var lastValue = that.lastValue,
        value = that.value,
        array = [],
        pos = value.indexOf('|'),
        start = that.selectionStart,
        end = that.selectionEnd,
        options;

    if (that.options) {
        options = that.options;
    } else {
        options = Object.keys(that.list.options).map(function (option) {
            return that.list.options[option].value;
        });
        that.options = options;
    }

    if (lastValue !== value) {
        that.list.innerHTML = options.filter(function (a) {
            return ~a.toLowerCase().indexOf(value.toLowerCase());
        }).map(function (a) {
            return '<option value="' + value + '|' + a + '">' + a + '</option>';
        }).join();
        updateInput(that);
        that.lastValue = value;
    }
}

function updateInput(that) {
    if (!that) {
        return;
    }
    var value = that.value,
        pos = value.indexOf('|'),
        start = that.selectionStart,
        end = that.selectionEnd;

    if (~pos) {
        value = value.slice(pos + 1);
    }
    that.value = value;
    that.setSelectionRange(start, end);
}

document.getElementsByTagName('input').browser.addEventListener('keyup', function (e) {
    updateList(this);
});
document.getElementsByTagName('input').browser.addEventListener('input', function (e) {
    updateInput(this);
});
<input list="browsers" name="browser" id="browser" onkeyup="updateList();" oninput="updateInput();">
<datalist id="browsers">
    <option value="Internet Explorer">
    <option value="Firefox">
    <option value="Chrome">
    <option value="Opera">
    <option value="Safari">
</datalist>
 类似资料:
  • 我试图用datalist html创建一个自动完成。这是我代码:

  • 在使用SpringCloudStream的流处理应用程序中,我获取一个输入流(键入一个整数),并在其上调用,以创建一个具有相同值但具有不同键(字符串)的新主题。输入主题中包含正确JSON格式的记录,例如: 问题是,流处理应用程序创建的主题的是包含JSON的字符串,而不是正确的JSON,即: 代码如下: 上面的函数所做的是消耗输入流,并生成一个输出流(被发送到)。该输出流与输入流具有相同的值,但只是

  • 问题内容: 我正在使用以下代码使用Python保存网页: 问题 :此代码将html保存为基本html,而不包含javascript,图像等。我想将网页保存为完整(就像我们在浏览器中有选择) 更新 :我现在正在使用以下代码保存webapge的所有js / images / css文件,以便可以将其保存为完整的网页,但是仍然像基本html一样保存了我的输出html: 问题答案: 尝试使用seleniu

  • 问题内容: 去吧,Dijkstra:打印出路径,而不仅仅是计算最短的距离。 http://play.golang.org/p/A2jnzKcbWD 我使用Dijkstra算法能够找到最短的距离,也许不是。可以在这里找到代码。 但是,如果我无法打印出路径,那将毫无用处。随着大量指针的出现,我无法弄清楚如何打印出权重最少的最终路径。 简而言之,我不仅要找到最短的距离,还要在给定的代码上打印出最短的路径

  • 当我试图发布我的联系表单时,我收到一个控制台错误,即我的Lambda、SE、API网关、Cloudfront备用源配置不能从子域“www.example.com”运行,而它可以从“example.com”运行。我如何允许联系表单避免多个(子)域上的任何问题?控制台中的错误告诉我以下信息: “跨源请求被阻止:同一源策略不允许读取https://example.com/rest/contact.中的远