鉴于HTMLInputElement
,HTMLSelectElement
和HTMLTextAreaElement
都直接继承了HTMLElement
(而不是像HTMLFormElement这样常见的东西),我希望{{1} }将能够集中非场元素,例如<label>
。
但是,下面的代码示例显示了<div>
正确地聚焦于<label>
的情况,但是需要一个JS hack(在示例中使用jQuery)来聚焦可编辑内容的<textarea>
。
是否有<div>
使用的元素的已发布列表?还是任何讨论内容可编辑的<label>
用法的文档?我是否缺少某些内容,也许不需要JS来关注可编辑的<div>
吗?
<div>
答案 0 :(得分:4)
<label>
元素可以与可标记元素相关联。
用于
与元素相同的文档中与元素相关的与元素相关的可标记的
id
。 ID为for属性值匹配的文档中的第一个元素是此label元素的带标签的控件(如果它是可标签的元素)。如果它不可标记,则for属性无效。如果还有其他元素也与id值匹配,那么在文档的后面,将不考虑它们。
可标记
可以与
<label>
元素关联的元素。包含<button>
,<input>
,<keygen>
,<meter>
,<output>
,<progress>
,<select>
, 和<textarea>
。
答案 1 :(得分:3)
我打算发布大约labelable个元素-但是来晚了。不过,这里我只是提供完整的内容:
可标记
可以与
<label>
元素关联的元素。包含<button>
,<input>
,<keygen>
,<meter>
,<output>
,<progress>
,<select>
, 和<textarea>
。
请注意,不建议使用keygen。
我的答案有什么新变化?好吧,我做了一点改动:
<a href="#contenteditable-id">
<label for="contenteditable-id" id="label-for-div-id" style="font-weight:bold;">
Label Editable Div
</label>
</a>
<div id="contenteditable-id" contenteditable="true" style="border:solid 1px black">
<p>
<span>Edtiable text</span>
</p>
</div>
答案 2 :(得分:0)
只需挂钩
$('label[for="' + hiddenControlId + '"]').click(function() {
// it won't focus immediately after click, so let's focus when this thread is about to finish
setTimeout(function() {
$("#contenteditable-id").focus(); // set input focus
}, 0);
});
答案 3 :(得分:0)
我不建议使用标签元素。它不是有效的 HTML,它实际上并未标记可编辑的 div 元素。
相反,您可以在可编辑的 div 元素上使用 aria-labelledby 属性,并将其指向用作可见标签的元素上的 ID。
在下面的代码片段中,我还通过使用旧式 onclick 事件属性简化了焦点功能。尽管 OP 使用了 jQuery,但这里没有必要。随意忽略这一点。
body {
font: 100%/1.5 sans-serif;
color: #444;
}
.richtext {
border: solid 1px currentColor;
border-radius: 5px;
padding: 1px 2px;
display: block;
box-sizing: border-box;
resize: both;
overflow: auto;
}
<span id="notes-label" onclick="document.getElementById('notes-input').focus()">Notes</span>
<div id="notes-input" class="richtext" aria-labelledby="notes-label" contenteditable="true"></div>