2017-01-24 11 views
0

私は現在、誰かが自分のページにアドレスを追加できる機能を実装しています。彼は単純な形式でこれを行うことができます。私が今持っているもの(アドレスを印刷する)である:テキストを編集可能なテキスト入力に変換してdbに保存する - Laravel

@foreach($addresses as $address) 
         @if($address->typeOfAddress==0) 
          Name: {{$address->name}}<br/> 
          Straße: {{$address->street}}<br/> 
          PLZ: {{$address->plz}}<br/> 
          Ort: {{$address->city}}<br/> 
          <a type="button" class="btn btn-info" href="/editAddress/{{$address->id}}">Bearbeiten</a> 
          <a type="button" class="btn btn-danger deleteAddressButton" href="/deleteAddress/{{$address->id}}">Löschen</a> 
          <br/><br/> 
          @endif 
        @endforeach 

変数addressesは、コントローラからビューに渡されます。

ここで達成しようとしているのは、ユーザーがname、straße、plz、ortなどのアドレス部分の1つをクリックするだけで、入力フィールドに変換され、値を変更できることです。次に、フォーカスを離れるときに(別の場所でクリックするか、またはその隣に保存ボタンを追加する)、新しいデータをajaxによってコントローラに送信する必要があります(要求自体は問題ありません)。しかし:どのように入力フィールドに変換することができますし、どのように私はそれを変換し、それに反応することができます(その後、ajax要求を送信する)?

私はインターネットで検索、何かを見つけることができませんでした...

編集:それはdoesnのことを、私が欲しいほとんど何んが、私は問題を抱えている、ここでフィドル(http://jsfiddle.net/yXcZG/3)を見つけ形式を保持しているように見えます。1.行間にはさらに多くのスペースがあります。編集するためにクリックすると、入力フィールドはページの一番下にジャンプし、同じ位置にとどまりません。また、私は変数を編集可能にしたいだけで、:の前のテキストではありません。 だから、これは私が試したものです:(AJAXのものが含まれていない場合の進路が、最初に他の事を仕事に持っている)

In JS: 

$(document).on('click', '.editableText', function (e) { 
      console.log(this); 
      TBox(this); 
     }); 

     $("input").live('blur', function (e) { 
      RBox(this); 
     }); 
     function TBox(obj) { 
      var id = $(obj).attr("id"); 
      var input = $('<input />', { 'type': 'text', 'id': id, 'class': 'editableText', 'value': $(obj).html() }); 
      $(obj).parent().append(input); 
      $(obj).remove(); 
      input.focus(); 
     } 
     function RBox(obj) { 
      var id = $(obj).attr("id"); 
      var input = $('<p />', { 'id': id, 'class': 'editableText', 'html': $(obj).val() }); 
      $(obj).parent().append(input); 
      $(obj).remove(); 
     } 

HTML:

@foreach($addresses as $address) 
         @if($address->typeOfAddress==0) 
          Name: <span id="addressName{{$address->id}}" class="editableText">{{$address->name}}</span><br/> 
          Straße: <span id="addressStreet{{$address->id}}" class="editableText">{{$address->street}}</span><br/> 
          PLZ: <span id="addressPLZ{{$address->id}}" class="editableText">{{$address->plz}}</span><br/> 
          Ort: <span id="addressCity{{$address->id}}" class="editableText">{{$address->city}}</span><br/> 
          <a type="button" class="btn btn-danger deleteAddressButton" href="/deleteAddress/{{$address->id}}">Löschen</a> 
          <br/><br/> 
          @endif 
        @endforeach 

EDIT2:この答えを見つけ(https://stackoverflow.com/a/6814092/3375021)ので、contenteditableを使用しますが、私はぼかしでもどちらのアドレスがデータベース内で変更されるべきか、またアドレスのどの部分が変更されるべきではないという問題があります..

+0

なぜフォームにデータをロードしてから、更新ボタンを押してください。豊富なルートを実装します。 –

+0

@DenisPriebe 1つのページに多くのアドレスがあるので、1つのページにそのような多くのフォームを入れたくないのです...ユーザーが新しいアドレスを作るためにボタンを押してもフォームを表示したいだけですが、 1つを編集したい、彼はちょうどアドレスの一部を押す必要があります、それは入力に変換し、フォーカスを残して保存する必要があります... – nameless

+0

**フォーマットを維持していないように見える**フォーマットではどういう意味ですか? –

答えて

1

jQueryのワーキングソリューションを探しているあなたは、あなたが編集可能な要素をクリックしたときのリスナーを持っているこの

JsFiddle example

で行くことができ、それはそれの価値を取ると、入力中に置くだろう。 あなたがぼかした後、この値を取ってそれで何でもしても構いません。

ここはjavascript(jQuery)の部分です。

私は、あなたがPHPを使用する必要があり、それをエコーするブレードを使用しないようにする必要があり、あなたのデータベースにhtmlタグやJSを保存しようとしている場合は、ブレード {{$variabl}}

の代わりに<?php echo $variable; ?>を使用するべきだと思います

$(function(){ 

    $('body').on("click", ".changeable", function(e){ 

    var text = $(this).text(); 

    $(this).html("<input type='text' class='input-editable' value='" + text + "'>"); 

    $(this).find('input').focus(); 
    }); 

    $('body').on("blur", ".input-editable", function(e){ 

    var text = $(this).val(); 

    $(this).parent().html(text); 

    console.log("Value changes to: " + text); 
    }); 

}); 
+0

私はすでに試した解決策との違いはありますか? – nameless

+0

@namelessこれにはblurイベントに関するテキストがあり、この関数内で任意のajax呼び出しを実行してDBを変更することができます。これはあなたが探している場所ですよね? – AfikDeri

+0

はい、そうです、まさに私が望むものです。そして、それは他の2つのソリューションよりも良いですが、1つの問題があります:テキストを2回クリックするので、最初に入力に変換し、2回目は楽しい/基本的にクリックします。そこに点滅するか、テキストの最後か何かを編集するだけです。問題(長い文章):テキストが2番目に消えます。クリックしてください...どうすれば修正できますか? – nameless

0

単純なエコー関数

関連する問題