首页  >  文章  >  web前端  >  如何在不同浏览器中可靠地设置输入元素的焦点?

如何在不同浏览器中可靠地设置输入元素的焦点?

DDD
DDD原创
2024-11-01 07:00:30211浏览

How to Reliably Set Focus on Input Elements in Different Browsers?

IE 和 Focus 事件问题

focus() 事件在 Internet Explorer 中可能不可靠。当尝试使用以下函数将光标焦点设置在输入元素上时:

function change() {
  var input = document.getElementById('pas');
  var input2 = input.cloneNode(false);
  input2.type = 'password';
  input.parentNode.replaceChild(input2, input);
  input2.focus();
}

IE7 将不会响应 focus() 调用,从而将光标留在输入元素之外。要在 IE 中纠正此问题,请使用 setTimeout 函数:

setTimeout(function() { document.getElementById('myInput').focus(); }, 10);

Opera Woes

但是,使用此解决方案会在 Opera 中引入新的困境。要解决此问题,请参阅“如何在 Opera 文本框上的所需索引中设置焦点”等资源。

通用解决方案

为了确保所有浏览器之间的兼容性,请合并处理输入元素无法立即可用的情况的代码片段:

setTimeout(

  function( ) {

    var el = document.getElementById( "myInput" ) ;
    ( el != null ) ? el.focus( ) : setTimeout( arguments.callee , 10 ) ;

  }

, 10 ) ;

此片段每 10 毫秒重试一次焦点,直到元素变得可用,解决了页面加载缓慢和元素延迟的问题可用性。

以上是如何在不同浏览器中可靠地设置输入元素的焦点?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn