ie focus bug

在IE中,新创建的input没有如预期的获得焦点。

如果把input.focus()放在一个setTimeout中延时执行,则就可以获得焦点。

  (function(){
        
        
        function get(id){
            return document.getElementById(id);
        }
        
        window.onload = function(){
            get('makeinput').onmousedown = function(){
                var input = document.createElement('input');
                input.setAttribute('type', 'text');
                input.setAttribute('value', 'test1');
                get('inpwrapper').appendChild(input);
                input.focus();
                input.select();
            }
            get('makeinput2').onmousedown = function(){
                var input = document.createElement('input');
                input.setAttribute('type', 'text');
                input.setAttribute('value', 'test1');
                get('inpwrapper2').appendChild(input);
                setTimeout(function(){
                    input.focus();
                    input.select();
                }, 0);
            }
            get('input').onkeypress = function(){
                get('preview').innerHTML = this.value;
            }
        }
    })();
    <h1><code>setTimeout</code></h1>
    <h2>1、未使用 <code>setTimeout</code></h2>
    <button id="makeinput">生成 input</button>
    <p id="inpwrapper"></p>
    <h2>2、使用 <code>setTimeout</code></h2>
    <button id="makeinput2">生成 input</button></h2>
    <p id="inpwrapper2"></p>
    <h2>3、另一个例子</h2>
    <p><input type="text" id="input" value=""/><span id="preview"></span></p>
原文地址:https://www.cnblogs.com/rubylouvre/p/2538523.html