Сосредоточьтесь на входных данных после их создания

#jquery

#jquery

Вопрос:

Я хотел бы заменить ввод текста на ввод пароля после нажатия на первый, мой код создает его, но он не фокусируется на новом вводе, я хотел бы это изменить.

Вот мой код.

 $('.input_center input:text').click(function(){
var padre = $(this).parent();
                var passInput = $(document.createElement("div"));
                passInput.html('<input type="password">');
                padre.append(passInput);
                passInput.focus();
                $(this).remove();
});
  

Этот passInput.focus () не выполняет фокусировку, поэтому я не знаю, как это сделать.

Комментарии:

1. как насчет установки таймаута, такого как setTimeout(функция(){passInput.focus()}, 400)?

2. Почему вы хотите это сделать? Это звучит как очень плохая идея.

Ответ №1:

passInput это <div> элемент, а не <input> , поэтому он не может получить фокус.

Измените его на это:

 passInput.find("input").focus();
  

На самом деле вы могли бы переписать всю эту функцию в один связанный оператор следующим образом:

 $(this)
    .parent()
    .append($(document.createElement("div"))
        .append($('<input type="password">').focus())
    )
    .end()
    .remove();
  

Хотя, на первый взгляд, я не знаю, сработает ли это с .focus() элементом до того, как он будет добавлен в DOM.

Ответ №2:

Попробуйте

 var v = $('<div><input class="pwd" type="password" /></div');
padre.appendTo(v);
$('.pwd').focus();
  

Это может помочь добавить, а затем отозвать код, чтобы получить фокус.