目前,我们只支持IE8。
我有一个从服务器获取数据的ajax调用,用响应替换容器div中的HTML,然后尝试将焦点放在响应中包含的元素上。
取决于[IE Magic]?有时这段代码有效,有时却没有。我需要找到一些可以在100%的时间内工作的东西。 console.log语句在100%的时间内记录正确的ID,即使焦点失败也是如此。
$.ajax({
type: 'POST',
url: that.Url,
contentType: 'application/json; charset=utf-8',
dataType: 'html',
data: dataToSend,
success: function (response) {
$(container).html(response);
that.initialize();
var element = document.getElementById(elementId);
setTimeout(function () {
setTimeout(function () {
setTimeout(function () {
setTimeout(function () {
setTimeout(function () {
setTimeout(function () {
console.log($(element).attr('id'));
element.focus();
}, 10);
}, 10);
}, 10);
}, 10);
}, 10);
}, 10);
}
嵌套的setTimeouts可以查看在早期超时期间是否有其他东西被放入堆栈。我尝试将一个setTimeout设置为1000,并且仍然看到随机故障。我已尝试将$(container).html(response);
替换为$(container)[0].innerHTML = response;
,但仍然无效。我尝试用document.getElementById(element)
替换$(container).find('#' + elementId)
。我也尝试将var element = document.getElementById(elementId);
移动到setTimeout中,但仍然看到随机失败。使用Firefox,需要0的setTimeouts,代码运行完美,但不幸的是,这不是我们的选择。将console.log
更改为alert
确实可以解决问题,但这只是因为它会延迟焦点,直到点击“确定”之后,但额外的鼠标点击对可用性来说非常糟糕。
that.initialize()
为新元素添加类,添加事件,修改新元素的宽度/高度等等......所有这些都在100%的时间内起作用。
答案 0 :(得分:4)
这似乎是旧IE中的真正错误。据报道,其中一个技巧是连续两次调用.focus()
。
答案 1 :(得分:1)
不应该是$(element).focus()
而不是element.focus()
吗? focus
是一个jQuery方法,必须在jQuery对象上调用。