我使用jQuery开发Web应用程序。 我有功能,增加了3个输入字段的新行。 创建这些DOM元素后,我想重点投入的领域之一。 我与呼吁必要的输入域jQuery的焦点()函数做这件事。
问题是,调用焦点()在IE6和FF3.5工作得很好,但在IE8无法正常工作。
我试图让这个问题在这里展示它的简单工作的例子,但与)的代码重点剥离的版本(是工作的罚款。 所以我的猜测是,DOM还没有准备好,当我打电话的IE8焦点()。 为此,我打过电话的setTimeout( 'myFocus()',400)。 我取得了成功,并在某些情况下,重点是真正的工作,但仍然并非总是如此。 随机它并不注重我的输入字段。
问题是:有没有人遇到过类似的问题,没有任何人有任何想法如何来解决办法呢? 使用的setTimeout感觉非常难看的解决方法。
TNX提前
编辑:2009年8月26日
成功复制的简单例子。 下面是转载了IE8这个bug HTML + JS代码。
<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警报()。 奇怪的是,如果有此警报(),然后后重点工作正常。
希望这有助于理解其中,我的问题是。
PS我需要我的应用程序,以这种方式工作 - 它是从下拉列表中选择值后再生的投入。 这是我的应用程序的简化的例子)。