2011-12-29 2 views
0

Что я делаю, это в основном профиль пользователя, в котором есть текстовое поле для описания, добавленное пользователем о себе. Хотя у меня есть отдельная страница, где пользователь может редактировать профиль, но я хочу предоставить функцию, которая, когда пользователь наводится на его поле описания, затем видит кнопку edit.Как заменить элемент textarea с помощью javascript

Если пользователь нажимает на эту кнопку, он сам может редактировать поле описания, а бэкэнд будет обновлен с использованием Ajax. Вызов ajax и обработка бэкэнда просты, но как я могу заменить html на кнопку textarea и submit и снова вернуть оригинальный html с помощью javascript.

Вот что мой HTML выглядеть

<div id="personalText" > 
    <a href="#" id="editButton"> edit </a> 
    <p id="descText">{{profile.desc}}</p> 
</div> 

Когда кто-то нажмет editButton Я хочу, чтобы заменить HTML внутри personalText с textarea, содержащий исходный текст в descText, и update кнопку. И когда пользователь редактирует текст и нажимает обновление, я обновляю бэкэнд-модель и снова добавляю тег <a> и тег <p>.

Может кто-нибудь помочь. Кажется, я знаю, как делать его части, но не могу понять, как я буду заменять исходную структуру на update.

ответ

2

Вместо создания/разрушающих элементов DOM вариант будет иметь правку <textarea/> скрыты.

<div id="personalText" > 
    <div class="display"> 
     <a href="#" id="editButton">edit</a> 
     <p id="descText">{{profile.desc}}</p> 
    </div> 
    <div class="edit" style="display:none;"> 
     <input type="submit" value="Update"/> 
     <textarea>{{profile.desc}}</textarea> 
    </div> 
</div> 

Тогда ваш jQuery может просто переключать элементы и обрабатывать сообщение ajax.

$("input[type='submit']").on("click", function() { 
    $.ajax({ 
     url:"/your/url/" 
    }).success(function(){ 
     $(".display, .edit").toggle(); 
     $("#descText").html($("textarea").val()); 
    }); 
    return false; 
}); 

Example on jsfiddle

+0

Большое спасибо за решение, я никогда хотя тумблер и она, кажется, гораздо лучшим решением. – Sachin

+0

Кажется, что есть некоторые проблемы с js, которые вы указали, он отлично работает на jsfiddle, но когда я запускаю на сервере разработки '$ (« # editButton »). On (« click », function()' уволен дважды в результате все это переключается дважды, и дисплей остается тем же. Как я знаю, это происходит, когда я вызываю вызов 'alert()' внутри функции, и всплывающее окно появляется дважды. – Sachin

+0

Когда я удаляю javasrcipt для кнопки ввода, то '$ (" # editButton ")' js запускается только один раз, но теперь текстовая область не отображает текст, который он должен. Хотя, если я вижу содержимое текстовой области с использованием предупреждения, тогда текст есть, но он не отображается – Sachin

1
$('#editButton').click(function(){ 
    var text = $('descText').text(); 
    var textArea = $('<textarea></textarea>'); 
    textArea.value = text; 
    $('#personalText').replaceWith(textArea); 
});