【发布时间】:2011-09-11 17:21:47
【问题描述】:
如何创建一个带有可点击标签的 HTML 复选框(这意味着点击标签会打开/关闭复选框)?
【问题讨论】:
如何创建一个带有可点击标签的 HTML 复选框(这意味着点击标签会打开/关闭复选框)?
【问题讨论】:
将复选框包裹在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 元素的内容内。在这种情况下,LABEL 可能只包含 一个 控制元素。标签本身可以位于关联控件之前或之后。
使用这种方法比for有一些优势:
无需为每个复选框分配id(太棒了!)。
不需要在<label>中使用额外的属性。
输入的可点击区域也是标签的可点击区域,因此没有两个单独的可以点击的地方可以控制复选框——只有一个,无论<input>和实际标签文本相距多远,而且没有不管你应用什么样的 CSS。
带有一些 CSS 的演示:
label {
border:1px solid #ccc;
padding:10px;
margin:0 0 10px;
display:block;
}
label:hover {
background:#eee;
cursor:pointer;
}
<label><input type="checkbox" />Option 1</label>
<label><input type="checkbox" />Option 2</label>
<label><input type="checkbox" />Option 3</label>
【讨论】:
只需确保标签与输入相关联。
<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>
【讨论】:
<input type="checkbox" name="foo[]" value="bar" ...>。这将为您提供一个数组,其中包含所有 选中 框(具有此名称)的值。例如,$_POST['foo'][0] 可能是 bar,$_POST['foo'][1] 可能是 baz(如果两者都被选中)。
您还可以使用 CSS 伪元素(分别)从所有复选框的值属性中选择和显示标签。
编辑:这仅适用于基于 webkit 和 blink 的浏览器(Chrome (ium)、Safari、Opera....) 以及大多数移动浏览器。此处不支持 Firefox 或 IE。
这可能仅在将 webkit/blink 嵌入到您的应用时才有用。
所有伪元素标签都是可点击的。
[type=checkbox]:after {
content: attr(value);
margin: -3px 15px;
vertical-align: top;
white-space: nowrap;
display: inline-block;
}
<input type="checkbox" value="My checkbox label value" />
【讨论】:
<label for="vehicle">Type of Vehicle:</label>
<input type="checkbox" id="vehicle" name="vehicle" value="Bike" />
【讨论】:
<label for="myInputID">myLabel</label><input type="checkbox" id="myInputID" name="myInputID />
【讨论】:
name 属性的值更改为不同于for 和id 属性中存在的值,因为这两个是相关,而name 不是(尽管我相信它仍然是强制性的)。
它也有效:
<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>
【讨论】:
for 和id 属性,因为label 标签内只有一个输入元素。
这应该对你有帮助: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>
【讨论】:
label {
border:1px solid #ccc;
padding:10px;
margin:0 0 10px;
display:block;
}
label:hover {
background:#eee;
cursor:pointer;
}
<label><input type="checkbox" />Option 1</label>
<label><input type="checkbox" />Option 2</label>
<label><input type="checkbox" />Option 3</label>
【讨论】:
<label for="my_checkbox">Check me</label>
<input type="checkbox" name="my_checkbox" value="Car" />
【讨论】:
使用label 元素和for 属性将其与复选框关联:
<label for="myCheckbox">Some checkbox</label> <input type="checkbox" id="myCheckbox" />
【讨论】:
在带有复选框的 Angular 材质标签中
<mat-checkbox>Check me!</mat-checkbox>
【讨论】:
使用这个
<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');
});
});
【讨论】: