DOM事件笔记——焦点 blur / focus / focusout / focusin

本文探讨了DOM中与焦点相关的四个事件——focus、focusin、blur和focusout的顺序及触发机制。重点指出focus和blur事件在捕获和冒泡阶段的行为,以及它们不会在父元素上触发。

 

 目标对象事件是否支持冒泡是否可取消默认行为支持注册方式
blurelement 失去焦点 on / 监听
focuselement 获得焦点 on / 监听
focusoutelement 失去焦点IE9+监听
focusinelement 获得焦点IE9+监听

四者事件顺序:

focus > focusin

blur > focusout

均设置捕获阶段

        var input = document.querySelector('input');
        var form = document.querySelector('.div1');
        //均设置在捕获阶段执行
        input.addEventListener('focusin',function () {
            console.log('input focusin');
        },true)
        input.addEventListener('focus',function () {
            console.log('input focus');
        },true)
        form.addEventListener('focusin',function () {
            console.log('form focusin');
        },true)
        form.addEventListener('focus',function () {
            console.log('form focus');
        },true)

        input.addEventListener('focusout',function () {
            console.log('input focusout');
        },true)
        input.addEventListener('blur',function () {
            console.log('input blur');
        },true)
        form.addEventListener('focusout',function () {
            console.log('form focusout');
        },true)
        form.addEventListener('blur',function () {
            console.log('form blur');
        },true)

均设置冒泡阶段

        var input = document.querySelector('input');
        var form = document.querySelector('.div1');
        
        input.addEventListener('focusin',function () {
            console.log('input focusin');
        },false)
        input.addEventListener('focus',function () {
            console.log('input focus');
        },false)
        form.addEventListener('focusin',function () {
            console.log('form focusin');
        },false)
        form.addEventListener('focus',function () {
            console.log('form focus');
        },false)

        input.addEventListener('focusout',function () {
            console.log('input focusout');
        },false)
        input.addEventListener('blur',function () {
            console.log('input blur');
        },false)
        form.addEventListener('focusout',function () {
            console.log('form focusout');
        },false)
        form.addEventListener('blur',function () {
            console.log('form blur');
        },false)

因为focus和blur无法冒泡,所以父元素form无法触发这两个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值