javascript - 在 Web 表单中将单选按钮呈现为可切换按钮的最佳方式
问题描述
我希望表单上的单选按钮看起来像可切换的 HTML 按钮,例如这些 Bootstrap 示例。使用 Flask、Bootstrap 和 jinja2,我已经能够将单选按钮转换为“按钮”。我的表单的这一部分目前看起来像这样:
{{ form.setting.label }}<br>
{% for subfield in form.setting %}
<tr>
<td>{{ subfield(class_="no_rad") }}</td>
<td>{{ subfield.label(class_="btn btn-primary") }}</td>
</tr>
{% endfor %}<br>
在这里,子字段将是单选按钮本身。分配了一个我用创建的class_="no_rad"
CSS 类display: none;
。使用相同的方法,subfield.label
分配一个 Bootstrap CSS 类,使其看起来像一个按钮。这些按钮是“可选择的”(它们有数据),但是:
- 我希望它显示按钮在单击时被切换
- 如果重新单击,我希望取消选择按钮(与典型的单选按钮不同)
我知道这可能需要 Jquery,但我不知道从哪里开始。
解决方案
在大多数情况下,我已经弄清楚如何完成我想要的。如果没有手动编码的 Jquery,我只需要集成更多的引导功能(按照我的问题中链接的示例),如下所示:
base.html 中一大堆丑陋的 src 标签:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
和正在显示的页面中的 Bootstrap/jinja2 混合:
{{ form.setting.label }}<br>
<div class="btn-group-toggle" data-toggle="buttons">
{% for subfield in form.setting %}
<label class="btn btn-primary">
{{ subfield}} {{ subfield.label(style="cursor:pointer;") }}
</label>
{% endfor %}<br>
{% for error in form.setting.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</div>
这些按钮在单击时看起来已激活。我说大部分是因为有一些奇怪的渲染功能:
- 我必须手动输入
style="cursor:pointer;"
,subfield.label
否则当鼠标悬停在按钮的标签上时,光标将是默认光标,而在该标签周围稍稍将默认为按钮的指针光标。 - 按钮本身比应有的高得尴尬。这可以用 CSS 修复,但我不确定为什么会发生这种情况。
- 我的表单的一部分是动态的,并且使用 jquery 基于单选按钮值进行更新。然而,使用这些 Bootstrap 样式,我的脚本只检测 div 中的第一个按钮何时被点击,而不是其他按钮。编辑:我已经用这个解决了这个问题
推荐阅读
- python - 在美丽的汤中寻找元素
- vue.js - Vue 3:Vue.createApp 不是构造函数
- sql - How to know if an element matches every in another table in SQL
- ruby-on-rails - 如何使用 vueonrails 对嵌套组件或开槽内容进行 SSR?
- javascript - 如何在我的 Vue 日历组件中以不同的方式设置不在当月的日期?
- haskell - 变量不在范围内:导入相关包时,getFileStatus 变为 Failed to load interface for 'System.Posix.Files.Common'
- c++ - 当我构建它时,将 FFTW 库动态链接到 Qt5 项目失败
- c# - 使用 MemoryStream 通过 WCF MessageContract 将文件上传到 SQL FileStream 在到达服务时为空
- python - Beowulf 集群上未出现进程
- javascript - 如何在函数外访问请求函数中定义的变量