javascript - 在 FORM 的选择中使用图像的最佳实践
问题描述
我被困在一个表格中,我想知道如何在选择选项中显示图像。
输入将加载文本。
我正在尝试做的...
在表单中进行这项工作的最佳方法是什么?
这就是我所做的。
所以我的代码是这样的,因为它<select><option><img href=""></option></select>
不起作用。
<div class="input-group mb-3">
<input type="text" class="form-control" aria-label="Text input with dropdown button">
<div class="btn-group">
<button type="button" class="no-border btn btn-secondary dropdown-toggle dropdown-toggle-split" id="dropdownMenuReference" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-reference="parent">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu " aria-labelledby="dropdownMenuReference" style="position: absolute;transform: translate3d(-352px, 35px, 0px);min-width: 380px;overflow-x: hidden;" x-placement="bottom-start">
@foreach($categories as $category)
<a class="dropdown-item" href="#"><img class="rounded" src="/storage/category-icon/{{$category->business_icon}}">{{$category->business_name}}</a>
@endforeach
</div>
</div>
</div>
对此的最佳做法是什么?(使用 bootstrap 4 和 laravel 顺便说一句)
解决方案
由于使用本机HTML
元素无法做到这一点,因此没有Javascript
. 因此,您至少需要一个隐藏的输入字段 ( <input name="foo-bar-baz" type="hidden value="…" />
) 来在服务器和客户端之间传输数据。数据可以是一个简单的序列化JSON
对象,如下所示:
[
{
"label": "Click ME",
"icon": "/img/icon.png",
"value": "item-xxx"
},
…
]
从那里开始,您需要编写一些 Javascript 代码来生成看起来像<select>
但不是的东西。该“虚拟字段”的每次更改都需要修改相应的隐藏值,以便在提交时将正确的值传输到服务器。
在这里我可以找到一个基于 的示例bootstrap
,也许这会有所帮助。它呈现一个<ul><li></li>…</ul>
列表以显示»虚拟字段«。
一种可能的解决方案可能在这里找到。
总而言之,您需要找到一个合适的 Javascript 库来帮助您完成它,或者自己编写一些代码来制作它。选择哪一个很大程度上取决于您的需求和要求。
这里要记住的另一件事是可访问性——如果用户禁用了 Javascript,或者使用有问题的浏览器来执行提供的代码,会发生什么。<select>
那么渲染常规并使用数据属性注入图像可能是一个很好的起点,如下所示:
<select name="foo-bar-baz">
<option value="value" data-icon="/path/to/icon">Label</option>
</select>
这会产生一个工作表单元素,然后可以用图标丰富它,以防 Javascript 正常工作。
所以回答这个问题:恕我直言,最佳实践是始终有效且不排除没有 Javascript、屏幕阅读器或基于文本的浏览器的用户的解决方案。所以上面提供的解决方案,从一个<select>
应该逐渐增强的常规开始,就是我在这里所说的最佳实践。
推荐阅读
- c# - OxyPlot:如何将所有 OxyColors 绑定为 WPF 组合框的 itemsource?
- java - PreparedStatement 类型中的方法 setString(int, String) 不适用于参数 (int, String[])
- c# - 如何在 C# 中将数组作为未知类型的参数传递?
- python-3.x - 执行列表创建的 Python 3 无法正常工作
- google-cloud-platform - BigQuery 数据集维护
- python - Pandas:使用 dtypes 但混合类型列读取 csv(NA 值)
- php - 如何获得与输入的数字一样多的结果?
- python - 从使用 pivot_table() 创建的 df 中删除索引名称
- laravel - 如何在 Docker 中使用 Laravel 队列监听
- symfony - Symfony - 带有 entity.propety 过滤器的下拉列表