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

如何在不丢失选项"value="功能的情况下限制数据管理器选项?

王渊
2023-03-14

使用@Olli的独特解决方案,在这里限制datalist显示的总条目数,我能够限制datalist提供的建议数量。

问题是:该解决方案只允许搜索选项innerHTML。它不允许同时搜索数据器选项value=,即使数据器在默认情况下能够这样做。

例如(见下面的示例),如果我输入Californiadatist不会返回California结果,但是如果我输入CACA-US,则datist返回预期的California结果。

为了包含innerHTML功能中的选项,我需要对Javcript代码进行哪些更改?

var search = document.querySelector('#search');
var results = document.querySelector('#searchresults');
var templateContent = document.querySelector('#resultstemplate').content;
search.addEventListener('keyup', function handler(event) {
    while (results.children.length) results.removeChild(results.firstChild);
    var inputVal = new RegExp(search.value.trim(), 'i');
    var clonedOptions = templateContent.cloneNode(true);
    var set = Array.prototype.reduce.call(clonedOptions.children, function searchFilter(frag, el) {
        if (inputVal.test(el.textContent) && frag.children.length < 5) frag.appendChild(el);
        return frag;
    }, document.createDocumentFragment());
    results.appendChild(set);
});
    
var n = document.getElementById("search");
n.addEventListener("keyup", function(event) {
    event.preventDefault();
    if (event.keyCode === 13) {
        document.getElementById("myButton").click();
    }
});
html lang-html prettyprint-override"><template id="resultstemplate">
<option value="Alabama">AL-US</option>
<option value="California">CA-US</option>
<option value="Michigan">MI-US</option>
<option value="Texas">TX-US</option>
<option value="Wisconsin">WI-US</option>
</template>
<input type="text" name="search" id="search"  placeholder="type state name or code" list="searchresults" autocomplete="off" />
<datalist id="searchresults"></datalist>

<button id="myButton" type="button"
onclick="loadDoc('state_data.xml', myFunction)">Submit
</button>

共有1个答案

拓拔辰钊
2023-03-14

只需使用(inputVal.test(el.textContent)| inputVal.test(el.value)代替inputVal.test(el.textContent)即可得到所需的结果。在这里,我们搜索valueinnerHTML,如果其中任何一个匹配输入文本,则接受它:)

更新:即使用户从中选择了一个项目,这也会导致下拉列表粘在那里,这是因为即使选择了一个项目,输入框的值也会与例如加州的下拉列表值相匹配。California将与加州的下拉列表值相匹配,并显示在下拉列表中。

为了解决这个问题,我们必须在if语句中添加另一个条件,(search.value!=el.value)这将确保如果输入值与下拉值完全相等,该下拉值将被忽略。查看下面更新的代码片段...

js lang-js prettyprint-override">var search = document.querySelector('#search');
var results = document.querySelector('#searchresults');
var templateContent = document.querySelector('#resultstemplate').content;
search.addEventListener('keyup', function handler(event) {
    while (results.children.length) results.removeChild(results.firstChild);
    var inputVal = new RegExp(search.value.trim(), 'i');
    var clonedOptions = templateContent.cloneNode(true);
    var set = Array.prototype.reduce.call(clonedOptions.children, function searchFilter(frag, el) {
        if ((inputVal.test(el.textContent) || inputVal.test(el.value)) && (search.value != el.value) && frag.children.length < 5) frag.appendChild(el);
        return frag;
    }, document.createDocumentFragment());
    results.appendChild(set);
});
    
var n = document.getElementById("search");
n.addEventListener("keyup", function(event) {
    event.preventDefault();
    if (event.keyCode === 13) {
        document.getElementById("myButton").click();
    }
});
<template id="resultstemplate">
<option value="Alabama">AL-US</option>
<option value="California">CA-US</option>
<option value="Michigan">MI-US</option>
<option value="Texas">TX-US</option>
<option value="Wisconsin">WI-US</option>
</template>
<input type="text" name="search" id="search"  placeholder="type state name or code" list="searchresults" autocomplete="off" />
<datalist id="searchresults"></datalist>

<button id="myButton" type="button"
onclick="loadDoc('state_data.xml', myFunction)">Submit
</button>
 类似资料:
  • 首先,我不是Docker新手(或专家),只是不确定如何在不炸毁我当前容器的情况下完成此操作。 我在玩Postgres,并使用这个命令构建了一个容器,但没有意识到它不会将Postgres暴露在Docker之外 我希望其他系统能够访问这些数据。我不想删除容器,因为我已经做了相当多的配置。 在停止实例后,我尝试过在 中编辑容器 文件,但是在启动容器备份后,该文件被覆盖。 将端口暴露在容器之外的最佳实践是

  • 在使用XCode 8构建我的iOS项目时,我遇到了以下错误: 我找到了许多答案,其中大多数都在说,检查项目设置页面中的< code >自动管理签名选项可以解决问题。 但是,缺少选项。我怎样才能让它出现?

  • 问题内容: 我使用的选择标记的格式允许多次选择,但我希望选择的最大数量为10。使用JavaScript或jquery是否可以? 提前致谢! 问题答案: 这是供您使用的一些完整代码…一定要喜欢Google AJAX API Playground :-) 编辑1: 注意:这只允许您选择5,因为我不想复制/粘贴另外10个选项:-) ​

  • 问题内容: 我想更改数据库表的列位置而不丢失数据。 例如: 当前表: 到 问题答案: 试试这个:

  • 我想在不丢失数据的情况下更改数据库表的列位置。 例如: 当前表格: 到

  • 我安装了一个HBase,其中有一组现有表,其中有一组数据(我不想删除)。最近,我偶然发现使用Apache Phoenix可以使用类似SQL的语法查询HBase数据,到目前为止,这非常棒。然而,由于我仍然不完全熟悉各种数据类型以及它们如何映射到我存储在HBase中的Java类型,有时我会弄错。如果我有一个存储为的HBase列 我不小心将我的Phoenix列创建为varchar,我现在如何在不丢失所有