div与焦点事件的问题

问题:给div添加onfocus事件无反应
解决:给div增加一个tabIndex属性
扩展:
1.div不支持焦点事件?
这里写图片描述
经测试,onfocus、onblur、onkeydown、onkeyup等与获取焦点的事件均无效,即默认情况下的div是不能获取焦点的。
那么第二个问题来了,div怎么才能获取焦点呢?
2.div如何获取焦点?
给div添加tabIndex属性
这里写图片描述
经测试,可以获取到焦点,并通过tab键进行切换,输出结果如下:
这里写图片描述
若将tabIndex的值设为-1,则可获取焦点,但是不能通过tab进行切换
ps:在w3c中看到说div不支持tabIndex属性?!excuse me?
在mdn中查找资料得知:
这里写图片描述
这里写图片描述
[好吧。。不会再相信w3c了。。。]
3.focus事件不支持事件冒泡?
以前一直以为所有事件都是支持冒泡的,都是可以cancel的,查阅了[MDN上相关资料](https://developer.mozilla.org/en-US/docs/Web/Events)后,才发现有些事件支持冒泡,有些事件并不支持冒泡;有些事件有默认行为(这类事件可以cancel),有些事件压根儿就没有默认行为(这类事件就不能 cancel )。
这里写图片描述
4.为什么在react中focus事件是可以支持事件冒泡的?
在imweb的文章中看到说[React采用的是顶层的事件代理机制,能够保持事件冒泡的一致性,可以跨浏览器执行,甚至可以在IE8中使用HTML5的事件。在 componentDidMount 方法里面通过 addEventListener 绑定的事件就是浏览器原生事件,使用原生事件的时候注意在 componentWillUnmount 解除绑定 removeEventListener,所有通过 JSX 这种方式绑定的事件都是绑定到“合成事件”。 “合成事件”会以事件委托(event delegation)的方式绑定到组件最上层,并且在组件卸载(unmount)的时候自动销毁绑定的事件。]
该事件系统的实现原理[ 事件监听器被绑定到整个文档的根节点上。当事件被触发, 浏览器会给出一个触发目标事件的 DOM 节点。为了在 DOM 的层级传播事件, React 不会迭代 virtual DOM 的层级,而是依靠每个 React component 各自独立的 id 来编码这个层级。我们能通过简单的字符串操作来获取所有父级 component 的父级内容,再把事件监听存储在hashmap当中。]

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值