2017-09-10 17 views
1

の外Iは、HTMLテーブルでforeach文をネストしている取得:PHP:値は、foreachの

@foreach ($getUsers as $key => $commits) 
    @foreach ($commits->getLinks as $key1 => $links) 
     <tr> 
      <td> 
       <input type="hidden" name="" id="applicant_id" value="{{$commits->id}}"> 
      <td> 
     <tr> 
    @endforeach 
@endforeach 

次にiは上記foreachループ内の隠しフィールドに定義された行のidを必要とする形態を有します。私はP フォームの隠しフィールドの値にforeachの隠された申請値をushingていますが、それは常にすべてのテーブルの行のためにのみ1つのID(同じIDを与える別の隠し入力フィールドを持ってい形で以下

。フォームの隠し入力にforeachの隠し入力からIDを取得するため

のjQuery:

$(document).ready(function(){ 
     var applicant_id = $('#applicant_id').val(); 
     $("#applicant").val(applicant_id); 
    }) 

フォーム

<form class="form-horizontal" method="POST" action="{{route('upload-agreement')}}" enctype="multipart/form-data"> 
    {{csrf_field()}} 
    <input type="hidden" name="applicant" id="applicant" > 
    <input type="file" name="file" class="form-control" required=""> 
    <button type="submit" class="btn btn-primary">Save changes</button> 
</form> 

問題:上記方法は私にいつも同じidを与えます。

+0

あなたは常に同じ値を返すjqueryのフィールドのIDを使用しています。 –

+0

これまでに提案したように、これを試しましたか:https://stackoverflow.com/a/46110516/2815635? – C2486

+0

同じid属性をページに複数回表示することはできません。一意でなければなりません。 @SagarGautam '$コミット 'に' $ commitits'のような 'getLinks'の内部オブジェクトがあるので、ループはすべての' $コミット'を通過するわけではありませんが、ループ内の変数をループ内で一意にする必要があります。 – Calimero

答えて

3

コメントに基づき、実際には1つのフォームしかありません。ユーザーがクリックするためのボタンなどを用意することで、正しいIDで動的にロードする必要があります。

@foreach ($getUsers as $key => $commits) 
    @foreach ($commits->getLinks as $key1 => $links) 
    <tr> 
     <td> 
      <button class="edit" data-id="{{$commits->id}}" >Edit</button> 
     <td> 
    <tr> 
    @endforeach 
@endforeach 


$(document).ready(function(){ 
    $('.edit').click(function(){ 
     $("#applicant").val($(this).data('id')); 
    }); 
}); 

あなたがクリックしたときに、それがユーザーエクスペリエンスに従うことをインタラクティブに簡単に提供するように、それは、ポップアップすることができますので、私はまた...種類のモーダルウィンドウでフォームを入れてしまうでしょう。

例を示しました。 (ブートストラップのフレームワークが必要です)

JS

$(document).ready(function(){ 
    $('.edit').click(function(){ 
     $('#myModal').modal({backdrop:'static'}); 
     $("#applicant").val($(this).data('id')); 
    }); 
}); 

あなたは `私が思う理由thatsの内部ループ上で変更されません$のcommits`変数を使用しているHTML

<div id="myModal" class="modal fade" role="dialog"> 
    <div class="modal-dialog"> 
    <div class="modal-content"> 
    <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal">&times;</button> 
    <h4 class="modal-title">Upload File</h4> 
    </div> 
    <div class="modal-body"> 
    <form class="form-horizontal" method="POST" action="{{route('upload-agreement')}}" enctype="multipart/form-data"> 
     {{csrf_field()}} 
     <input type="hidden" name="applicant" id="applicant" > 
     <input type="file" name="file" class="form-control" required=""> 
     <button type="submit" class="btn btn-primary">Save changes</button> 
    </form> 
    </div> 
    <div class="modal-footer"> 
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
    </div> 
</div> 

+0

それは働いた、ありがとう – Gammer

1

あなたは配列をループしていますが、idの代わりに、同じidを持つ各繰り返しの中に入力を作成しています。嬉しいことにDOMの中に共存できる入力クラス名またはデータ属性を設定します。 idを持つ要素が一つだけあるはずですまたはHTMLの仕様が言うように、あなたは間違ったもの

+0

あなたは、foreachの隠された入力の 'applicant_id'に固有のIDを与えるべきですか? – Gammer

+0

あなたの例のすべてのinput要素のidがapplicant_idとして与えられているので、もしあなたが$ 10( "#applicant_id")を使用すると、 1つだけを選択し、DOMの完全性に違反しているかどうかにかかわらず、どちらを選択するかを制御していません。 –

+0

フォームのユースケースは少し不明です。ページに10個の値があるときに、どの値を送信するかをフォームがどのように知っていると思いますか –

2

を得ることができます:

id属性は、その要素の一意の識別子(ID)を指定します。この値は、要素のホームサブツリー内のすべてのIDの中で一意でなければならず、少なくとも1つの文字を含んでいなければなりません。値にはスペース文字を使用できません。

https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attribute

あなたはあなたでしょう、テーブル内の重複のIDを持っているあなたのデータベースレコードを望んでいないでしょうか?まあ、同じ経験則がページ内のHTML要素に適用されます。これは、データベース項目を表示用にループするときに、後でそれらとやりとりするときに留意することが特に重要です。あなたのケースでは

<input type="hidden" name="" id="applicant_id" value="{{$commits->id}}"> 

あなたがここにinput要素のidとname属性を間違えている場合があります。 name属性は、親フォームが送信されたときに名前に値を関連付けるために使用されます。 id属性は、ユニークであることを意味する識別子で、CSSスタイルまたはJavaScript操作(document.getElementById()メソッドまたはそのjQueryカウンターパート$('#FindThisIdForMe'))に便利です。

dom全体で重複するid値を持つと無害ですが、依然としてhtmlが無効になり、要素の取得が中断する可能性があります(名前が示すように、要素を取得したり、代わりに複数の候補)。

id属性の値に何らかの変数を追加すると、問題が解決されます。 :

<input type="hidden" name="" id="applicant_id_{{$commits->id}}" value="{{$commits->id}}"> 

さらに、jQueryセレクタを固定します。

フォームを送信するかどうかによって、非表示入力のname属性を同じ値に設定することも、設定しないこともできます。

+0

最高の説明... 'jQueryセレクタ'? – Gammer

+0

申し訳ありませんが、私は適切な答えを正しく終了する時間が足りませんでした。幸いにも、あなたはその間に別の役に立つ答えを得ました。あなたのプロジェクトに最高の運があります。 – Calimero

+0

ええ、上記の答えは素晴らしいです、@ KyleKのおかげで、あなたの答えは非常に便利だった。 – Gammer