html - 当数据列表中引入的字符串不在数据列表中时,有什么方法可以显示输入?
问题描述
我从未使用过数据列表,我只想在写入的值不在数据列表中时才显示文件类型输入。这是我的代码:
<input list="customer" name="customer">
<datalist id="customer">
<option value="Customer 1">
<option value="Customer 2">
<option value="Customer 3">
</datalist>
<input type="file">
所以,我想要的是,如果你引入一个不在选项中的值,我想显示输入类型文件。有没有办法用 CSS 做到这一点?
编辑:我更改了代码,因为我要显示的选项位于 php 数组中。所以这是我现在的代码:
<datalist id="customer">
<?php
foreach ($_SESSION[CUSTOMER_NAMES] as $row) {
?>
<option value="<?php echo $row[0] ?>">
<?php } ?>
</datalist>
<div class="inputBox">
<input type="text" name="customer" id="customer" required="" list="customer"
<?php
if (isset($_SESSION[CUSTOMER])) {
?>
value="<?php echo $_SESSION[CUSTOMER]; ?>"
<?php } ?>>
<label for="customer">Customer</label>
</div>
解决方案
因为只有在 CSS 中这是不可能的,所以我会使用 javascript 并创建一个选项值数组;在input
事件中,我会检查该值是否存在于数组中。
如果检索到一个值,则.found
在列表输入中切换一个类,然后可以使用同级选择器隐藏文件输入
var dl = [...document.querySelectorAll('option')].map(
(opt) => opt.value);
var cs = document.querySelector('[name="customer"]');
cs.addEventListener('input', function() {
this.classList.toggle('found', dl.includes(this.value))
});
[type="file"] { display: inline-block; }
.found ~ [type="file"] { display: none; }
<input list="customer" name="customer">
<datalist id="customer">
<option value="Customer 1">
<option value="Customer 2">
<option value="Customer 3">
</datalist>
<input type="file">
推荐阅读
- google-sheets - 如何从 LOOKUP 中获取 NETWORKDAYS 的假期范围?
- python - Keras 使用权重提取文本中的信息特征
- azure-cosmosdb - 在哪里可以找到通过 MongoDb API 搜索 Cosmos DB 的 Azure 文档?
- angularjs - angularjs中的插值
- node.js - Azure Webapp(使用 Nodejs)记录到 Blob 存储
- google-bigquery - 流插入数据后立即从 BigQuery 获取计算结果?
- c# - 我如何修复 backgroundworker 正忙 c# 代码
- python - 循环如何帮助在此代码中进行迭代
- node.js - 在 NodeJS Lambas 中访问 AWS SSM 参数
- javascript - JavaScript:检测 CSS3 动画何时结束