2011-12-29 10 views
0

私が作成しているのは、基本的にユーザーが自分自身について追加した説明用のテキストボックスを持つユーザープロファイルです。ユーザーがプロフィールを編集できる別のページがありますが、ユーザーが説明欄にカーソルを置くとeditボタンが表示されるという機能を提供したいと考えています。javascriptを使用してtextareaで要素を置き換える方法

ユーザーがそのボタンをクリックすると、そこの記述フィールドを編集でき、バックエンドはAjaxを使用して更新されます。 ajax呼び出しとバックエンド処理は簡単ですが、htmltextareasubmitボタンに置​​き換えて、元のhtmlをjavascriptを使用して元に戻すにはどうすればよいですか。ここで

は、誰かが私がdescTextで元のテキスト、およびupdateボタンを含むtextareapersonalText内のhtmlを交換したいeditButtonをクリックすると、私のHTMLは

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

のように見えるものです。ユーザーがテキストを編集して更新をクリックすると、バックエンドモデルを更新して、<a>タグと<p>タグを再度挿入します。

誰でも手助けできます。私はそれの部分を行う方法を知っているようだが、元の構造をどのように置き換えるかを把握することはできないupdateをクリックしてください。

答えて

2

DOM要素を作成/破棄する代わりに、オプションを非表示にすることができます。

<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

jsfiddleで問題なく動作していますが、開発サーバーで '$("#editButton ")を実行すると、on(" click "、function()'が起動しています私はこの関数の中に 'alert()'呼び出しを入れ、ポップアップが2回現れたということです。 – Sachin

+0

javasrciptを削除すると入力ボタンの場合、 '$("#editButton ")' jsは1回だけ起動されますが、テキスト領域にはテキストが表示されません。そこにはありますが、表示されていません – Sachin

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