[英]focus doesn't work in IE
我有以下功能
function change()
{
var input = document.getElementById('pas');
var input2 = input.cloneNode(false);
input2.type = 'password';
input.parentNode.replaceChild(input2,input);
input2.focus();
}
但是focus()
在 ie7 中不起作用,那我该怎么办! 我想让光标在输入里面!
谢谢
很好的解决方案,谢谢,但现在它在歌剧中不起作用:(
对于 IE,您需要使用 settimeout 函数,因为它很懒惰,例如:
setTimeout(function() { document.getElementById('myInput').focus(); }, 10);
来自http://www.mkyong.com/javascript/focus-is-not-working-in-ie-solution/
对于歌剧,这可能会有所帮助: how to set focus in required index on textbox for 歌剧
更新:
以下代码片段处理元素不可用并在短时间内重试的情况 - 非常适合加载缓慢的页面和/或直到一段时间后才可用的元素。
setTimeout(
function( ) {
var el = document.getElementById( "myInput" ) ;
( el != null ) ? el.focus( ) : setTimeout( arguments.callee , 10 ) ;
}
, 10 ) ;
我们遇到了同样的问题。 为了聚焦,我们正在使用 General 函数,该函数应用了以下提到的 settimeout 解决方案: http ://www.mkyong.com/javascript/focus-is-not-working-in-ie-solution/ 100 毫秒。
仍然在某些屏幕上它不能正常工作。 特别是当包含 iframe 时。 还有另一个已知且类似的 IE 问题:
IE 9 和 IE 10 时时无法在输入文本框中输入文本-> IE 9 和 IE 10时时无法在输入文本框中输入文本
我注意到的是,当你有焦点时,没有指针,你可以通过按 TAB 键(聚焦下一个元素)而不是 SHIFT+TAB 来应用解决方法,这将返回到我们的目标元素,并带有焦点并输入指针。 为了确保我们可以输入内部输入,我们专注于随机元素,然后是我们的目标输入。
$('body').focus();
n.focus();
因此,我们在 javascript/JQuery 中的常规焦点功能中应用了相同的解决方案。 所以有一个 if 语句
...
if($.browser.msie) {
setTimeout(function() { try {
$('body').focus(); //First focus on random element
$(n).focus(); //Now focus on target element
} catch (e) { /*just ignore */ } }, 100); //See http://www.mkyong.com/javascript/focus-is-not-working-in-ie-solution/
} else { //Standard FF, Chrome, Safari solution...
...
可以肯定的是,由于存在较大的回归,我们仍然保留使用 settimeout 作为备份的解决方案。 在 IE10、IE11、Firefox 45、Chrome 49.0.2623.87 上测试
function change() {
var input = document.getElementById('pas');
var input2 = input.cloneNode(false);
input2.type = 'password';
input.parentNode.replaceChild(input2, input);
setTimeout(function () {
input2.focus();
}, 10);
}
IE7 不支持focus()
方法。 我没有看到任何方法。
我遇到了同样的问题,并且通过创建 SetInitialFocus 函数并在我的 PageLoad 函数中调用它,能够让 IE 使用隐藏的代码工作。
看看下面的例子并试一试,它对我有用。 http://www.cambiaresearch.com/c4/df9f071c-a9eb-4d82-87fc-1a66bdcc068e/Set-Initial-Focus-on-an-aspnet-Page.aspx
如果您希望在表中最后一行的第一个输入元素中设置焦点。我保存表的 div 的名称是tableDiv ,我将焦点设置到最后一行的第一个输入文本
setTimeout(function(){
$($('#tableDiv tr:last').find('input[type=text]')[0]).focus();
},2);
@Bojan Tadic 谢谢!
下面的代码做到了:)
$('body').focus(); //First focus on random element
我认为当您使用输入和占位符时会出现问题。 由于这个答案,管理如此解决了这个问题,我错过了 $(body).focus。 使此代码仅在 IE 上运行,以便可以通过“tabbing”自由访问我的所有输入。 以前,当我的输入中只有 tabIndex 时,我能够移动到下一个,但焦点未完成并且无法在其中写入任何内容。
这是完整的代码。
$('input[name^="someName"]').on('keydown', function(e){
var keyCode = e.which || e.keyCode;
if(keyCode === 9){
e.preventDefault();
$('body').focus();
var nextTabIndex = parseInt($(this).attr("tabIndex"));
nextTabIndex++;
setTimeout(function(){$('input[tabIndex=' + nextTabIndex +']')[0].focus();},20);
}
});
使用 jQuery 很容易,但不知道为什么你要这样做困难:) 在这个例子中,我有一个类分配给输入字段,我想要一个名为 initFocus 的初始焦点集。 您可以使用任何要查找元素的选择器。 从你的代码我会使用 $("#pas").focus();
$(".initFocus").focus();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.