问题是,在IE6和FF3.5中调用focus()函数正常工作,但在IE8中不起作用。
我试图制作一个简单的工作示例来展示此问题,但是使用简化版本的代码,focus()函数正常工作。因此,我的猜测是在调用focus()时DOM尚未准备就绪。为此,我尝试调用setTimeout('myFocus()',400)。在某些情况下,我成功了,确实聚焦了输入字段,但并不总是有效。它随机地无法聚焦我的输入字段。
问题是:是否有人面临类似的问题,是否有任何想法如何解决?使用setTimeout感觉像非常丑陋的解决方法。
先谢谢。
<html>
<head>
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
function performChanged() {
formChanged = true;
}
function handleChange() {
var parentDiv = $('#container');
newValue = $(html).html();
parentDiv.html(newValue);
$(".sel1",parentDiv).bind('change',handleChange);
//alert('Uncomment this and after alert focus will be on input');
$("input.cv_values",parentDiv).focus();
}
$(document).ready(function() {
$('.trackChange').bind('change', handleChange);
});
var html = '<div class=\"div1\">\n<select class=\"sel1\" id=\"sel1\" name=\"sel1\"><option value=\"\"><\/option>\n<option value=\"11\">Select me to see problem<\/option>\n<\/select>\n\n\n<input class=\"cv_values\" id=\"sel3\" name=\"sel3\" size=\"30\" type=\"text\" value=\"\" /><br/>Focus should in input field. With alert it is but without alert focus is not there</div>';
</script>
</head>
<body>
<select class="trackChange" onchange='performChanged();'>
<option value=""></option>
<option value="1" >Select me to generate new inputs</option>
</select>
<div id="container"></div>
</body>
复现步骤: 1)从第一个下拉列表中选择值,您会发现第一次输入有效。 2)从第二个下拉列表中选择值。您会看到错误已经复现。
然后在代码中,您可以注释掉显示JS alert()的行。奇怪的是,如果有此alert(),那么聚焦就能正常工作。
希望这可以帮助您了解我的问题所在。
P.S. 我需要我的应用程序以这种方式工作-在从下拉列表中选择值之后重新生成这些输入框。这是我应用程序的简化示例;)。
document.ready(...)
)? - kangax