#javascript #jquery
#javascript #jquery
Вопрос:
Я пытаюсь создать список текстовых полей с помощью jquery. Что я хочу, так это иметь текст, который при нажатии превращается в текстовое поле. Затем я хочу, чтобы он вернулся к текстовым послесловиям. Моя проблема заключается в том, чтобы сфокусировать динамически созданные текстовые поля, изменить текст текстового поля, удалить и изменить текст. Это мой код:
$('.l').click(function() {
$('<input type="text" id="ltb" class="' $(this).attr("class") '">').insertAfter($(this)).val($(this).val());
$('#ltb').focus();
$(this).remove();
})
$('#ltb').blur(function() {
$('<div id="' $(this).attr("class") '" class="l">' $(this).val() '</div>').insertAfter($(this));
$(this).remove();
});
.l — это текст, а #ltb — текстовое поле. Мне нужно, чтобы #ltb изменил значение, сфокусировался и был удален. Мне нужно .l для изменения после удаления #ltb. Может кто-нибудь сказать мне, как это сделать?
Комментарии:
1. Можем ли мы получить небольшой образец страницы с содержимым? Кроме того, зачем удалять текст, почему бы просто не установить
display:none
?
Ответ №1:
Вместо .click(function () {})
используйте .live('click', function () {})
или .delegate('click', function () {})
. Аналогично .blur()
.
Это необходимо, потому что элементы динамически добавляются в документ и к ним не добавлен прослушиватель событий.
Ответ №2:
Рабочая редакция здесь — обратите внимание (как сказал Пепкин) на live
, также я переместил удаление области ввода текста.
Ответ №3:
$(document).ready(function () {
$('.l').live('click', function () {
$(this).replaceWith('<input type="text" id="ltb" class="' $(this).attr('id') '" value="' $(this).text() '" />');
$('#ltb').focus().select();
});
$('#ltb').live('blur', function () {
$(this).replaceWith('<div id="' $(this).attr('class') '" class="l">' $(this).val() '</div>');
});
});