Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IE focus event handler delay

I have problem with focus event handling in the code below in IE8 I get the following output:

LOG: set focus txt1
LOG: set focus txt2
LOG: txt1 focus
LOG: txt2 focus

but in all other browsers the output is:

LOG: set focus txt1
LOG: txt1 focus
LOG: set focus txt2
LOG: txt2 focus

it seems that IE8 queues all focus requests and executes event handlers after current function ends.

Is there any workaround to force IE8 to behave nicely like other browsers?

<html>
<head>
</head>
<body>
<script>
        function test(){
            console.log('set focus txt1');
            document.getElementById('txt1').focus();
            console.log('set focus txt2');
            document.getElementById('txt2').focus();
        }
    </script>
<input id="txt1" type="text" onfocus="javascript:console.log('txt1 focus')" style="width:100px" />
<input id="txt2" type="text" onfocus="javascript:console.log('txt2 focus')" style="width:100px" />
<button value="Click" onclick="javascript:test()"></button>
</body>
</html>
like image 490
Aleksandar Mirilovic Avatar asked Mar 10 '26 13:03

Aleksandar Mirilovic


1 Answers

IE delays the actual focus until after the function test() is completed, so I am afraid you have to use a construction like:

function test(){
    console.log('set focus txt1');
    document.getElementById('txt1').focus();

    window.setTimeout(function() {
        console.log('set focus txt2');
        document.getElementById('txt2').focus();
    }, 1);
}

Here I postpone the second part of the function so that IE will have time to set the focus on txt1 before the second part is executed.

By the way, you should omit the prefix javascript: in the onclick and onfocus attributes. The javascript: prefix should only be used in a href attribute.

like image 195
Elian Ebbing Avatar answered Mar 13 '26 01:03

Elian Ebbing



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!