原生标签的focus

当点击按钮后,输入框理论上可以获得焦点,但由于事件顺序,按钮会抢占焦点。使用setTimeout将焦点设置变为异步,使得输入框能重新获取焦点。结论是页面中只能有一个元素拥有焦点。
摘要由CSDN通过智能技术生成

使用与不使用setTimeout的代码如下:

get('makeinput').onmousedown = function() {
                var input = document.createElement('input');
                input.setAttribute('type', 'text');
                input.setAttribute('value', 'test1');

                get('inpwrapper').appendChild(input);

                input.onfocus = function() {
                    console.log("生成的input获得了焦点");
                }

                input.onblur = function() {
                    console.log("生成的input失去了焦点");
                }

                input.focus();
                input.select();

            }

            get('makeinput').onfocus = function() {
                console.log("按钮获得了焦点");
            }

            get('makeinput2').onfocus = function() {
                console.log("按钮获得了焦点");
            }

            get('makeinput2').onmousedown = function() {
                var input = document.createElement('input');
                input.setAttribute('type', 'text');
                input.setAttribute('value', 'test1');
                get('inpwrapper2').appendChild(input);

                input.onfocus = function() {
                    console.log("生成的input获得了焦点");
                }

                input.onblur = function() {
                    console.log("生成的input失去了焦点");
                }

                setTimeout(function() {
                    input.focus();
                    input.select();
                }, 0);
            }
点击按钮后:

【不使用setTimeout】控制台打印出
在这里插入图片描述
【使用setTimeout】控制台打印出
在这里插入图片描述

总结

我们会发现focus被触发了,也就是说input其实获得了焦点,但是因为我们点击了按钮,导致焦点又被按钮夺走了,才导致最终生成的效果是没有焦点的。至于为什么使用setTimeout就可以生效,这是因为同步变成了异步,焦点被按钮获得,然后input来了个回马枪,把焦点给夺过来了。

以上来源知乎

个人理解

【button、input等等html标签都有获得焦点的机会,而真正页面呈现出获得焦点的元素,必然是页面所有标签中最终获得焦点的那一个 ONLY ONE】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luxiaopengyou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值