Добавление поля ввода в dom и фокусировка на нем в IE
-
01-07-2019 - |
Вопрос
Я пытаюсь создать div, который при щелчке по нему превращается в поле ввода и фокусируется на нем.Я использую прототип для достижения этой цели.Это работает как в Chrome, так и в Firefox, но не в IE.IE отказывается фокусировать только что добавленное поле ввода, даже если я установил тайм-аут в 1 секунду.
В основном код работает следующим образом:
var viewElement = new Element("div").update("text");
var editElement = new Element("input", {"type":"text"});
root.update(viewElement);
// pseudo shortcut for the sake of information:
viewElementOnClick = function(event) {
root.update(editElement);
editElement.focus();
}
Приведенный выше пример представляет собой сокращенную версию фактического кода, фактический код работает нормально, за исключением бита фокуса в IE.
Есть ли ограничения на функцию фокуса в IE?Нужно ли мне помещать ввод в форму?
Решение
Я предполагаю, что IE еще не обновил DOM, когда вы вызываете focus().Иногда браузеры ждут завершения выполнения сценария, прежде чем обновлять DOM.
Я бы попробовал выполнить обновление, а затем сделать
setTimeout("setFocus", 0);
function setFocus()
{
editElement.focus();
}
Другой вариант — всегда иметь оба элемента в DOM и просто менять местами style.display в зависимости от того, что вам нужно скрыть/отобразить в данный момент.
Другие советы
Какая версия IE?Какой у вас DocType установлен?это строгий режим, режим стандартов или особенностей?Появляются ли какие-либо ошибки JavaScript (проверьте, нет ли в строке состояния внизу слева маленького желтого предупреждающего знака)?Включите оповещение об ошибках для всех ошибок через «Инструменты» > «Параметры» > «Дополнительно».
Ойсин
На вопрос уже ответил 17 из 26.Я просто хочу отметить, что у Prototype есть собственный механизм для этого: Функция.отложить()