调用焦点时,按钮和跨度之间的区别是什么
What is the difference between button and span when invoke focus?
HTML代码片段:
<div contenteditable='true' id="txt">123<b>456</b>789</div>
<button onclick="get()">Click Me</button>
<span onclick="get()">Click Me</span>
<script>
function get(){
document.getElementById('txt').focus()
}
</script>
单击名为
txt
的节点,将光标设置在7
之前,然后单击按钮
观察div的光标位置。单击名为
txt
的节点,将光标设置在7
之前,然后单击"跨度"
观察div的光标位置
比较div的光标位置,
您会发现Button
单击事件不会更改div的原始光标位置
但Span
点击事件确实如此。
这真的很奇怪,那么这里发生了什么
(我的测试基于WebKit浏览器。)
在Firefox中的行为是相同的。
我将继续推测,单击跨度将导致光标移动到您在跨度中单击的位置,这意味着它在div中的位置现在丢失了。将焦点移回div会将其放置在默认位置(开头)。点击按钮不会导致光标移动,因为按钮无法容纳光标;因此,您的光标一直保持在div中的位置。
光标是html文档中的一个,也用于选择文本,例如;如果打开插入符号浏览,则显示在Firefox中。现在,如果使用控件(文本框或文本区域)而不是带有contenteditable=true
的div,则行为将与您预期的一样(单击跨度或按钮没有区别),因为控件管理自己的光标(要测试这一点,只需将div替换为textarea
)。
关于您正在做的事情的可访问性,有一点需要注意,标签不像按钮那样被视为"可点击"资产。因此,当涉及到仅通过键盘访问您正在创建的控件时,对于那些不使用鼠标浏览页面内容并依赖键盘的人来说,标签不一定通用。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- JavaScript中的函数和对象之间没有区别吗?
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- javascript函数的:和=之间的区别
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 函数中this和var之间的区别
- “util.inherits”和在NodeJS中扩展原型之间的区别
- Math.min()和Math.max()之间有什么区别?在Javascript中
- webpack开发模式和生产构建模式之间有什么区别
- servlet和代理servlet之间的区别
- Javascript 类型未定义和 void 之间的区别
- Javascript-defineProperty和直接在对象上定义函数之间的区别
- 关于承诺/A+规范,术语“当时可”和“承诺”之间有什么区别
- 布局引擎和javascript引擎之间的区别
- 什么's extjs中的mon()和on()之间的区别
- type=text/javascript和language=javascript之间的区别
- 函数()和新函数()之间的区别
- JavaScript中let和var之间的区别
- 蓝鸟的done()和spread()之间的区别
- Node.js HTTP/NET——连接和请求之间的区别