Добавляем поле ввода в dom и фокусируем его в IE - PullRequest
0 голосов
/ 19 сентября 2008

Я пытаюсь сделать 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? Нужно ли вводить данные в форме?

Ответы [ 3 ]

4 голосов
/ 19 сентября 2008

Я предполагаю, что IE еще не обновил DOM, когда вы выполняете вызов focus (). Иногда браузеры будут ждать завершения сценария до обновления DOM.

Я бы попробовал сделать обновление, затем сделать

setTimeout("setFocus", 0);

function setFocus()
{
    editElement.focus();
}

Другим вариантом будет то, что оба элемента будут постоянно присутствовать в DOM и просто поменять их style.display в зависимости от того, что вам нужно скрыть / показать в данный момент времени.

0 голосов
/ 27 сентября 2008

На вопрос уже ответили 17 из 26 . Я просто хочу отметить, что у Prototype есть собственный механизм для этого: Function.defer ()

0 голосов
/ 19 сентября 2008

Какая версия IE? На что установлен ваш DocType? это строгий, стандартный или причудливый режим? Появляются ли какие-либо ошибки JavaScript (проверьте в строке состояния слева внизу небольшой желтый предупреждающий знак) Включите оповещение об ошибках для всех ошибок через Сервис> Параметры> Дополнительно.

Oisin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...