質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

3126閲覧

jQuery inplaceEditorの作り方

may88seiji

総合スコア79

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2016/09/09 07:51

編集2016/09/09 08:53

###前提
個人の名前やメールアドレスの表示されたマイページの作成しています。

###実現したいこと
「編集」ボタンを押すと既に入力されいてる文字が編集可能の状態になり、
「保存」ボタンを押すと内容を変更して編集完了、
「キャンセル」ボタンを押すと変更内容をキャンセルして編集前に戻す。

###試したこと
「inplace editor」で検索したコードをWebから引っ張ってきて、
いろいろと触って見ましたがうまくいっておりません。
お教えいただければ幸いです。

###該当のソースコード

javascript

1//ボタン表示の切り替え 2$(function(){ 3 $('.edit_off').each(function(){ 4 $(this).css({display:"none"}); 5 }); 6 $(".edit_on").click(function(){ 7 $(this).css({display:"none"}); 8 $(this).siblings('.edit_off').css({display:"inline"}); 9 }); 10 11 $('.edit_off').click(function(){ 12 $(this).css({display:"none"}); 13 $(this).siblings('.edit_off').css({display:"none"}); 14 $(this).siblings('.edit_on').css({display:"inline"}); 15 }); 16}); 17 18//inplace editor 19$(function(){ 20 $(".table_right td").click(edit_toggle()); 21 22 function edit_toggle(){ 23 var edit_flag=false; 24 return function(){ 25 if(edit_flag) return; 26 var $input = $("<td input>").attr("type","text").val($(this).text()); 27 $(this).html($input); 28 29 $("input", this).focus().blur(function(){ 30 save(this); 31 $(this).after($(this).val()).unbind().remove(); 32 edit_flag = false; 33 }); 34 edit_flag = true; 35 } 36 } 37});

html

1<tbody class="table_right"> 2 <tr> 3 <th scope="row">氏名</th> 4 <td><span class="name">田中 太郎</span><input type="text" name="Name" value="田中 太郎"> 5 <img src="/images/mypage/btn_edit.png" alt="編集" class="edit edit_on"> 6 <img src="/images/mypage/btn_save.png" alt="保存" class="save edit_off"> 7 <img src="/images/mypage/btn_cancel.png" alt="キャンセル" class="cancel edit_off"></td> 8 </tr> 9 </tbody> 10 </table> 11 </div>

css

1.title_right{ 2 border-left: 3px solid #ffde00; 3 width: 180px; 4 height: 34px; 5 margin-left: 180px; 6 margin-top: 18px; 7 margin-bottom: 18px; 8} 9.title_right p{ 10 font-size: 22px; 11 padding-left: 18px; 12 padding-top: 5px; 13}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/09/09 08:53

前回の質問でも指摘しましたが、「<td input」という書き方はしません。
may88seiji

2016/09/09 08:55

修正しました!失礼しました。
guest

回答2

0

ベストアンサー

はじめましてm(_ _)m
フロントエンドの処理だけでしたら、おそらく下記で動くかと思います。

Javascript

1$(function(){ 2 //もはやedit_offじゃなくても良いのですが、そのまま流用しています 3 $('.edit_off').each(function(){ 4 $(this).add($(this).parents("tr").find('.off')).hide(); 5 $(this).parents("tr").find("td:first").css("width","200px") 6 }); 7 //var target;はテキスト取得用、var val;は代入先用 8 var target; 9 var val; 10 $(".edit_on").click(function(){ 11 target = $(this).parents("tr").find('input[type="text"]') 12 val = $(this).parents("tr").find('.display_target').text() 13 $(target).val(val) 14 $(this).add($(this).parents("tr").find(".on")).hide() 15 $(this).parents("tr").find('.off').show() 16 }); 17 $('.edit_off').click(function(e){ 18 target = $(this).parents("tr").find('.display_target') 19 val = $(this).parents("tr").find('input[type="text"]').val() 20 $(target).text(val) 21 $(this).add($(this).parents("tr").find('.off')).hide(); 22 $(this).parents("tr").find('.on').show(); 23 }); 24});

show()、hide()を分かりやすくするために、それぞれ切り替わる対象の要素にonとoffのclassを付与しています。

HTML

1<table> 2 <tbody class="table_right"> 3 <tr> 4 <th scope="row">氏名</th> 5 <td><input type="text" name="name_kanji" value="田中 太郎" class="off"> 6 <span class="display_target on">田中 太郎</span> 7 </td> 8 <td><span class="edit edit_on on">編集</span> 9 <span class="cancel edit_off off">保存</span> 10 </td> 11 </tr> 12 <tr> 13 <th scope="row">フリガナ</th> 14 <td><input type="text" name="name_kana" value="タナカ タロウ" class="off"> 15 <span class="display_target on">タナカ タロウ</span> 16 </td> 17 <td><span class="edit edit_on on">編集</span> 18 <span class="cancel edit_off off">保存</span> 19 </td> 20 </tr> 21 <tr> 22 <th scope="row">メールアドレス</th> 23 <td><input type="text" name="email" value="xxx@email.com" class="off"> 24 <span class="display_target on">xxx@email.com</span> 25 </td> 26 <td><span class="edit edit_on">編集</span> 27 <span class="cancel edit_off off">保存</span> 28 </td> 29 </tr> 30 </tbody> 31</table>

また、所々に気になる点がありましたので、一度基礎から学ばれると良いかと思います。
たとえば、tdもinputもどちらも要素名ですので**<td input>**のように要素名は共存せず、

HTML

1<td><input...>...</td>

のようにそれぞれ独立した一つのタグとして扱います。
私自身もまだまだ未熟ですが、地固をするだけでだいぶ楽になりますよ^^/

タグの基本と使い方

投稿2016/09/09 09:11

編集2016/09/09 09:18
MaShiRo_H

総合スコア328

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

may88seiji

2016/09/09 10:53

フォーム入力、触るの初めてでした^_^; 勉強になります。 ありがとうございます。
guest

0

javascript

1//inplace editor 2$(function(){ 3 $('.edit_on').click(function(){ 4 $(".input").css({display:"inline"}); 5 $('.name').css({display:"none"}); 6 }); 7 8 $('.save').click(function(){ 9 var $text = $('.input').val(); 10 $('.name').text($text); 11 $('.name').css({display:"inline"}); 12 $('.input').css({display:"none"}); 13 }); 14 15 $('.cancel').click(function(){ 16 var $cancel = $('.name').text(); 17 $('.input').val($cancel); 18 $('.input').css({display:"none"}); 19 $('.name').css({display:"inline"}); 20 }); 21});

html

1 <tr> 2 <th scope="row">氏名</th> 3 <td><span class="name">田中 太郎</span><input class="input" type="text" name="Name" value="田中 太郎"> 4 <img src="/images/mypage/btn_edit.png" alt="編集" class="edit edit_on"> 5 <img src="/images/mypage/btn_save.png" alt="保存" class="save edit_off"> 6 <img src="/images/mypage/btn_cancel.png" alt="キャンセル" class="cancel edit_off"></td> 7 </tr>

こちらで解決しました。
ありがとうございます。

投稿2016/09/09 10:51

may88seiji

総合スコア79

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問