jQuery: Textfield теряет фокус на развертывание () - PullRequest
4 голосов
/ 04 декабря 2010

У меня есть текстовое поле, которое обернуто в div ошибки, когда пользователь либо отправляет, либо фокусируется на неверном вводе. Я хотел бы удалить оболочку, если пользователь исправляет свою ошибку, однако метод unwrap() приводит к тому, что поле теряет фокус.

$(special_input).live('keyup', function() {
    if (input_okay && input_had_errors) {
        $(this).unwrap();
    }
});

Ничего страшного, я могу сбросить фокус, и он отлично работает ...

$(this).unwrap().focus();

... везде, но в IE! Я попытался вставить функцию setTimeOut() в вышеупомянутую функцию, чтобы обойти отсутствие поддержки IE для всплытия события focus(), и это работает ... вроде.

Единственная проблема в том, что он устанавливает курсор на начало набираемого текста, а не на конец. (ЧТО?!)

Сброс фокуса кажется немного уродливым в любом случае. Есть ли способ удержать unwrap() от его отмены?

Спасибо.

Тип-решение:

По указанным причинам и неуловимым я просто решил исправить проблему неуместного курсора, что можно сделать, сбросив значение текстового поля после повторной фокусировки на нем. Код выглядит следующим образом.

$(this).unwrap();
setTimeout(function() { $(this).focus().val($(this).val()); }, 5);

Ответы [ 2 ]

3 голосов
/ 04 декабря 2010

Я не думаю, что вы можете .unwrap() без потери фокуса, поскольку он удаляет родительский узел из DOM и добавляет потомков, где родительский был впоследствии. Вы можете ввести неприкрепленные поля ввода, если браузер не удалял фокус при их отсоединении.

0 голосов
/ 04 декабря 2010

Я согласен с неуловимым, что маловероятно, что вы можете .unwrap(), не теряя фокус, по указанным причинам.Вы можете сначала рассмотреть причину, по которой вы переносите текстовое поле.Возможно ли, что вы могли бы добиться того же эффекта, просто применяя класс к полю или с помощью div, помещенного до или после поля?Это позволит вам вообще обойти проблему.

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