Вопрос

Я пытаюсь создать 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 есть собственный механизм для этого: Функция.отложить()

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top