JavaScript: ошибка Видимости в Internet Explorer при установке внимания на входной элемент

У меня есть только эта ссылка: http://www.mjmwired.net/kernel/Documentation/rtc.txt

я вполне уверен, RTC - то, что Вы ищете все же.

РЕДАКТИРОВАНИЕ

Другие ответы кажутся более портативными, чем мой.

13
задан Peter Mortensen 8 April 2010 в 10:15
поделиться

3 ответа

Это старая, как черт, ошибка в IE (рад узнать, что она исправлена ​​в версии 8). Я не знаю официальной причины, но я считаю, что это связано с тем, что IE не перерисовывает DOM до тех пор, пока контекст выполнения не будет завершен, тем временем пытаясь focus () элемент, пока он считает, что он все еще скрыт :

function calledAtSomePoint() { // begin execution

    // ...

    element.style.display = ''; // show container
    input.focus(); // IE thinks element is hidden 

    // end of execution, IE repaints the DOM but it's too late
} 

Решение - использовать setTimeout :

setTimeout(function() {
    document.getElementById('add-comment-login-overlay-username-input').focus()
}, 0)

У меня это случалось много раз, в том числе с jQuery. Это не вина какой-либо библиотеки. setTimeout всегда помогал мне.

17
ответ дан 1 December 2019 в 23:32
поделиться

Установите фокус в блоке try / catch.

1
ответ дан 1 December 2019 в 23:32
поделиться

Можно предположить, что вызов insertAfter сбивает с толку IE DOM. Можете ли вы протестировать код без вызова insertAfter ? Неужели он не работает точно так же? Если нет, есть ли другой способ добиться того же результата? Может быть, вместо перемещения узлов скопировать узлы и удалить оригиналы?

0
ответ дан 1 December 2019 в 23:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: