ChatGPT解决这个技术问题 Extra ChatGPT

如何创建带有可点击标签的复选框?

如何创建带有可单击标签的 HTML 复选框(这意味着单击标签会打开/关闭复选框)?


C
Community

方法一:包装标签标签

将复选框包装在 label 标记中:

<label><input type="checkbox" name="checkbox" value="value">Text</label>

方法二:使用 for 属性

使用 for 属性(匹配复选框 id):

<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id">Text</label>

注意:ID 在页面上必须是唯一的!

解释

由于其他答案未提及,标签最多可包含 1 个输入并省略 for 属性,并且假定它用于其中的输入。

摘自 w3.org(我强调):

[for 属性] 显式地将正在定义的标签与另一个控件相关联。如果存在,此属性的值必须与同一文档中某个其他控件的 id 属性的值相同。如果不存在,则定义的标签与元素的内容相关联。要将标签与另一个控件隐式关联,控件元素必须在 LABEL 元素的内容内。在这种情况下,标签可能只包含一个控制元素。标签本身可以位于相关控件之前或之后。

for 相比,使用此方法有一些优势:

无需为每个复选框分配一个 id(太棒了!)。

无需在

输入的可点击区域也是标签的可点击区域,因此没有两个单独的可以点击的地方可以控制复选框 - 只有一个,无论 和实际标签文本相距多远,无论哪种类型应用到它的 CSS。

带有一些 CSS 的演示:

标签{边框:1px实心#ccc;填充:10px;边距:0 0 10px;显示:块; } 标签:悬停 { 背景:#eee;光标:指针; }


喜欢它,但请再次编辑。这仅适用于复选框。我们不要鼓励人们用标签包装他们的其他输入,因为这会破坏网格系统并且移动响应将更难实现
@韦斯利。 getbootstrap.com/css/#forms - 不要用 <label> 包装输入如果让移动响应变得更加困难
@John 这是专门用于引导程序的标记指南。如果您不使用框架,或者使用不同的框架,那应该完全没问题。谢谢回复。
@约翰。在您链接的页面上,引导程序示例都用标签包装复选框,我根本没有看到您指出的任何警告,也许它不再与最新的引导程序相关。
正如我今天学到的,不要混合使用方法 1 和方法 2。如果将复选框包装在标签中并包含 for,那么单击标签不会触发复选框。
Q
Quentin

只需确保标签与输入相关联。

<fieldset>
  <legend>What metasyntactic variables do you like?</legend>

  <input type="checkbox" name="foo" value="bar" id="foo_bar">
  <label for="foo_bar">Bar</label>

  <input type="checkbox" name="foo" value="baz" id="foo_baz">
  <label for="foo_baz">Baz</label>
</fieldset>

我对你给这两个复选框赋予相同的名称和不同的值这一事实感到困惑。这是故意的吗?
@LarsH — 是的,这就是您创建复选框组的方式。
谢谢。我正在查看 w3.org/wiki/HTML/Elements/input/checkbox,但在这方面没有帮助。
使用 PHP,这不会使 $_POST['foo'] 总是同时具有两个最大值之一吗?即使两个都检查了。什么是复选框组?
@JeromeJ:为了让 php 正确处理它,您必须在名称中添加方括号,例如:<input type="checkbox" name="foo[]" value="bar" ...>。这将为您提供一个数组,其中包含所有 选中 框(具有此名称)的值。例如,$_POST['foo'][0] 可能是 bar,而 $_POST['foo'][1] 可能是 baz(如果两者都被选中)。
m
mplungjan

您还可以使用 CSS 伪元素(分别)从所有复选框的值属性中选择和显示标签。
编辑: 这仅适用于基于 webkit 和闪烁的浏览器(Chrome(ium) , Safari, Opera....) 以及大多数移动浏览器。此处不支持 Firefox 或 IE。
这可能仅在将 webkit/blink 嵌入到您的应用中时有用。

所有伪元素标签都是可点击的。

[type=checkbox]:after { content: attr(value);边距:-3px 15px;垂直对齐:顶部;空白:nowrap;显示:内联块; }

演示:http://codepen.io/mrmoje/pen/oteLl,+ The gist of it


真的。壁虎和三叉戟和壁虎似乎不喜欢这样。这仅适用于 Webkit 和 Blink。我会更新答案
否决。虽然有可能,但这是一种不好的方式——在许多浏览器上都不起作用,不利于可访问性。
除了兼容性问题,这个解决方案不像最佳答案那样语义化,因为
“它在 Webkit/Blink 上工作”闻起来像一个使用 ( stackoverflow.com/questions/2587669/… ) 的错误,因此它可能随时停止工作。
D
Dave Kiss
<label for="vehicle">Type of Vehicle:</label>
<input type="checkbox" id="vehicle" name="vehicle" value="Bike" />

S
ShaneBlake
<label for="myInputID">myLabel</label><input type="checkbox" id="myInputID" name="myInputID />

由于某些读者可能会感到困惑,因此您应该将 name 属性的值更改为与 forid 属性中存在的值不同的值,因为这两个是相关的,而 name 不(我相信它仍然是强制性的)。
J
Junaid khan

标签{边框:1px实心#ccc;填充:10px;边距:0 0 10px;显示:块; } 标签:悬停 { 背景:#eee;光标:指针; }


J
John

这应该可以帮助您:W3Schools - Labels

<form>
  <label for="male">Male</label>
  <input type="radio" name="sex" id="male" />
  <br />
  <label for="female">Female</label>
  <input type="radio" name="sex" id="female" />
</form>

M
Mystral

它也有效:

<form>
    <label for="male"><input type="checkbox" name="male" id="male" />Male</label><br />
    <label for="female"><input type="checkbox" name="female" id="female" />Female</label>
</form>

您可以在示例中省略 forid 属性,因为 label 标记内部只有一个输入元素。
C
Christopher Armstrong
<label for="my_checkbox">Check me</label>
<input type="checkbox" name="my_checkbox" value="Car" />

J
James Allardice

使用 label 元素和 for 属性将其与复选框相关联:

<label for="myCheckbox">Some checkbox</label> <input type="checkbox" id="myCheckbox" />


A
Arunkumar Ramasamy

在带有复选框的 Angular 材质标签中

<mat-checkbox>Check me!</mat-checkbox>

A
Anni

用这个

<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id" id="checkbox_lbl">Text</label>


$("#checkbox_lbl").click(function(){ 
    if($("#checkbox_id").is(':checked'))
        $("#checkbox_id").removAttr('checked');
    else
       $("#checkbox_id").attr('checked');
    });
});

不必使用 JavaScript 来执行此操作。它内置在 HTML 中。
@LasseBunk,如果它只是 JavaScript,但它需要整个 jQuery 库才能工作。让我们看看是否有人可以提出 Angular 2 解决方案。