如何将选择选项显示为按钮?

15

我有一个带有下拉选择框的表单:

<select name="work_days" id="id_work_days" multiple="multiple">
  <option value="1">sun</option>
  <option value="2">mon</option>
  <option value="3">tue</option>
  <option value="4">wed</option>
  <option value="5">thu</option>
  <option value="6">fri</option>
  <option value="7">sat</option>
</select>
我希望通过CSS和JavaScript将此表单字段呈现为一组按钮(请参见截图)。

在这里输入图片描述

我试图将其显示为

<input type="button" name="work_days" value="sun">
<input type="button" name="work_days" value="mon">
<input type="button" name="work_days" value="tue">
<input type="button" name="work_days" value="wed">
...

但是我无法从后端获取并验证此表单中的数据。 选择小部件可能最适合,但我不知道如何将其显示为按钮。

如果能提供一个想法或示例,我将不胜感激。


2
这篇文章对您有帮助吗?https://dev59.com/aXfZa4cB1Zd3GeqPNRrC - ajthinking
1
就像对复选框所做的那样,因为它们无法进行样式化,您必须执行相同的操作,将选择隐藏并使用HTML元素和样式模拟它等。 - Rainbow
@Anders 我认为这会有所帮助,谢谢! - Vlad T.
@ZohirSalakCeNa 差不多,不过我的表单字段必须接受多个选择,但我认为可以将选项作为文本添加到隐藏字段值中,然后在后端解析它。感谢你的帮助! - Vlad T.
2
样式选项会有帮助吗?https://codepen.io/peker-ercan/pen/yRgLMO - Ercan Peker
2个回答

19

你可以为下拉选择元素中的选项添加样式。

#id_work_days{
  height: 44px;
  border: none;
  overflow: hidden;
}
#id_work_days::-moz-focus-inner {
  border: 0;
}
#id_work_days:focus {
  outline: none;
}
#id_work_days option{
  width: 60px;
  font-size: 1.2em;
  padding: 10px 0;
  text-align: center;
  margin-right: 20px;
  display: inline-block;
  cursor: pointer;
  border:rgb(204, 204, 0) solid 1px;
  border-radius: 5px;
  color: rgb(204, 204, 0);
}
<select name="work_days" id="id_work_days" multiple>
  <option value="1">sun</option>
  <option value="2">mon</option>
  <option value="3">tue</option>
  <option value="4">wed</option>
  <option value="5">thu</option>
  <option value="6">fri</option>
  <option value="7">sat</option>
</select>


你可能想使用 display: inline-block; 代替 float:left - Selvakumar Arumugam
3
这在Chrome中看起来很不错。但在Firefox和Safari中无法正常显示(Firefox仅显示第一个选项,其他选项被溢出隐藏;Safari仅显示前三个选项,垂直排列,并具有不正确的样式)。 - Daniel Beck
谢谢大家指出这个问题,我认为问题就像@SelvakumarArumugam所说的那样在于float left。 - Stakvino
是的,抱歉,你是对的;我已经编辑了评论(我不小心还在FF中查看之前的版本)。 - Daniel Beck
1
我看到select标签中有multiple属性,但是在Chrome 68中我无法选择多个选项。而且在Safari中根本不起作用。但还是谢谢你的帮助! - Vlad T.
显示剩余2条评论

12

我建议使用复选框而不是下拉菜单,这样你可以通过一些CSS技巧来完全定制按钮的样式。

#id_work_days input[type="checkbox"] {
  display: none;
}

#id_work_days span {
  display: inline-block;
  padding: 10px;
  text-transform: uppercase;
  border: 2px solid gold;
  border-radius: 3px;
  color: gold;
}

#id_work_days input[type="checkbox"]:checked + span {
  background-color: gold;
  color: black;
}
<p id="id_work_days">
  <label><input type="checkbox" name="work_days" value="1"><span>sun</span></label>
  <label><input type="checkbox" name="work_days" value="2"><span>mon</span></label>
  <label><input type="checkbox" name="work_days" value="3"><span>tue</span></label>
  <label><input type="checkbox" name="work_days" value="4"><span>wed</span></label>
  <label><input type="checkbox" name="work_days" value="5"><span>thu</span></label>
  <label><input type="checkbox" name="work_days" value="6"><span>fri</span></label>
  <label><input type="checkbox" name="work_days" value="7"><span>sat</span></label>
</p>


正是我所需要的,因为我可以勾选多个按钮。 - Vlad T.
不错。您可能还想将 user-select: none 添加到 span 选择器中。 - Gustaf Liljegren
4
我想补充一点,如果您想要单选而不是多选,您可以将复选框改为单选按钮。 - Joel G Mathew
我将它改为“单选按钮”以获得独占的按钮,现在可以使用了。 - Yan King Yin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接