2016-07-31 9 views
2

メインフォームのモーダル内で呼び出す更新フォームがあります(onclickイベントでは、フォームが含まれている編集ページのxmlhttprequestを呼び出すようにクリックがトリガーされます)。格納されたデータ値と比較する)。つまり、フォームの検証とajaxを使用してデータをポストすることを除いて、すべてがうまく動作し、アップデートが機能し、ポストワークを行い、最初にデータを取得します。私のメインページには、作成呼び出しがあり、新しいインスタンスが作成され、フォームの検証とajaxポストでうまく動作するので、必要なjQueryや他のスクリプトにすることはできません。フォームの検証とその後のコードは実行されません

これは私のフォームです:

<form id="eventFormUpdate" method="POST" class="form-horizontal" action="Event/{{$event->id}}/Update"> 
    <input type="hidden" name="_method" value="PATCH" id="hidden-update"> 
    <div class="form-group"> 
     <label class="col-xs-3 control-label">Nom</label> 
     <div class="col-xs-5"> 
      <input type="text" class="form-control" name="nameUpdate" value="{{$event->name}}"/> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label class="col-xs-3 control-label">Date de début</label> 
     <div class="col-xs-5 dateContainer"> 
      <div class="input-group input-append date" id="startDatePickerUpdate"> 
       <input type="text" class="form-control" name="starting_dateUpdate" value="{{$event->starting_date}}"/> 
       <span class="input-group-addon add-on"><span class="glyphicon glyphicon-calendar"></span></span> 
      </div> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label class="col-xs-3 control-label">Date de fin</label> 
     <div class="col-xs-5 dateContainer"> 
      <div class="input-group input-append date" id="endDatePickerUpdate"> 
       <input type="text" class="form-control" name="ending_dateUpdate" value="{{$event->ending_date}}"/> 
       <span class="input-group-addon add-on"><span class="glyphicon glyphicon-calendar"></span></span> 
      </div> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label class="col-xs-3 control-label">Assigné à</label> 
     <div class="col-xs-5 selectContainer"> 
      <select name="assigned_toUpdate" class="form-control"> 
       <option value="4" selected >First</option> <!--fix this by checking if is the selected data or not--> 
      </select> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label class="col-xs-3 control-label">Description</label> 
     <div class="col-xs-5"> 
      <textarea id="descUpdate" class="form-control" name="descriptionUpdate" placeholder="Veuillez entrer une description">{{$event->description}}</textarea> 
     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-xs-5 col-xs-offset-3"> 
      <button type="submit" class="btn btn-default" id="update-event-submit">valider</button> 
     </div> 
    </div> 
</form> 

そしてここでは、フォームの検証と

<!-- event update script --> 
<script> 
$(document).ready(function() { 
    $('#startDatePickerUpdate') 
      .datepicker({ 
       format: 'yyyy/mm/dd' 
      }) 
      .on('changeDate', function(e) { 
       // Revalidate the start date field 
       $('#eventFormUpdate').formValidation('revalidateField', 'starting_dateUpdate'); 
      }); 

    $('#endDatePickerUpdate') 
      .datepicker({ 
       format: 'yyyy/mm/dd' 
      }) 
      .on('changeDate', function(e) { 
       $('#eventFormUpdate').formValidation('revalidateField', 'ending_dateUpdate'); 
      }) 
      .find('[name="assigned_toUpdate"]') 
      .selectpicker() 
      .change(function(e) { 
       /* Revalidate the pick when it is changed */ 
       $('#eventFormUpdate').formValidation('revalidateField', 'assigned_toUpdate'); 
      }) 
      .end(); 

    $('#eventFormUpdate') 
      .formValidation({ 
       framework: 'bootstrap', 
       icon: { 
        valid: 'glyphicon glyphicon-ok', 
        invalid: 'glyphicon glyphicon-remove', 
        validating: 'glyphicon glyphicon-refresh' 
       }, 
       fields: { 
        nameUpdate: { 
         validators: { 
          notEmpty: { 
           message: 'Le nom est obligatoire.' 
          } 
         } 
        }, 
        starting_dateUpdate: { 
         validators: { 
          notEmpty: { 
           message: 'La date de début est obligatoire.' 
          }, 
          date: { 
           format: 'YYYY/MM/DD', 
           min: new Date(new Date().setDate(new Date().getDate()-1)), 
           max: 'ending_date', 
           message: 'La date de début est non valide.' 
          } 
         } 
        }, 
        ending_dateUpdate: { 
         validators: { 
          notEmpty: { 
           message: 'La date est oligatoire.' 
          }, 
          date: { 
           format: 'YYYY/MM/DD', 
           min: 'starting_date', 
           message: 'La date de fin est non valide.' 
          } 
         } 
        }, 
        descriptionUpdate: { 
         validators: { 
          notEmpty: { 
           message: 'La description est obligatoire.' 
          } 
         } 
        }, 
        assigned_toUpdate: { 
         validators: { 
          notEmpty: { 
           message: 'Veuillez séléctionner un utilisateur.' 
          } 
         } 
        } 
       } 
      }) 
      .on('success.field.fv', function(e, data) { 
       if (data.field === 'starting_dateUpdate' && !data.fv.isValidField('ending_dateUpdate')) { 
        // We need to revalidate the end date 
        data.fv.revalidateField('ending_dateUpdate'); 
       } 

       if (data.field === 'ending_dateUpdate' && !data.fv.isValidField('starting_dateUpdate')) { 
        // We need to revalidate the start date 
        data.fv.revalidateField('starting_dateUpdate'); 
       } 
      }) 

      .submit(function(){ 
       return false; 
      }) 

      .submit(function(){ 
       console.log('gonnastartsub'); 
       var $form = $("#eventFormUpdate"), 
         url = $form.attr('action'); 
       console.log('got vars'); 
       $.post(url, $form.serialize()).done(function() { 
        console.log('am in'); 
        $("#modal-closeUpdate").click(); 
        console.log('posted'); 
       }); 
      }); 
}); 
$("#descUpdate") 
     .focus(function() { 
      if (this.value === this.defaultValue) { 
       this.value = ''; 
      } 
     }) 
     .blur(function() { 
      if (this.value === '') { 
       this.value = this.defaultValue; 
      } 
     }); 

を投稿AJAXを扱う私のスクリプトで更新

これがされ私のコントローラ

public function update(Request $request,$id) 
{ 
    $event = event::find($id); 

    $event->name = $request->name; 
    $event->description = $request->description; 
    $event->starting_date = $request->starting_date; 
    $event->ending_date = $request->ending_date; 
    $event->assigned_to = $request->assigned_to; 
    $event->save(); 

} 

そして、この私のルートが呼び出し:

Route::patch('Event/{eventID}/Update', '[email protected]'); 

最後に一つは、最初のスクリプトは私のメインページにあった、そしてそれは私が呼ばれるにそれを入れてみましたので、動作しませんでしたページはxmlhttprequestで動作し、まだ動作しません。 私が考えることができるのは、新しいページ(データを編集して更新するフォーム)を呼び出すと、スクリプトはメインページに既に読み込まれているため、処理する要素のIDは見つかりません。それがなぜ機能しないのか、少なくともこれが私が見つけることができる唯一の理由です。 お願いします。

+0

HTMLフォームに[送信]ボタンがありますか? (フォームの投稿をする) –

+0

ええ、何?私は提出のクリックをチェックするので、私はそれをやめて、ページをリフレッシュせずに、そして単にモーダルを閉じることなく、それをやりなおすことができます...プラス私はそれを作成フォーム上で同じ方法で持っています。問題は.... – LaravelOnly

+0

私の悪い.. @ mmrrobotに気付かなかった –

答えて

1

あなたdatepickersの最小と最大のエラーを持っているすべてのまあ最初、彼らはあなたが設定したフィールド名と一致していない、この

max: 'ending_dateUpdate' 
min: 'starting_dateUpdate' 

第二に、フォームのフィールド名にそれらを設定しますそれは本当にそれがデータを見つけることができないならば、これはあなたのコントローラのページでなければなりません更新することはできませんので、お使いのコントローラページ上のものと一致しません:

public function update(Request $request,$id) 
{ 
    $event = event::find($id); 

    $event->name = $request->nameUpdate; 
    $event->description = $request->descriptionUpdate; 
    $event->starting_date = $request->starting_dateUpdate; 
    $event->ending_date = $request->ending_dateUpdate; 
    $event->assigned_to = $request->assigned_toUpdate; 
    $event->save(); 

} 

はそれがお役に立てば幸いです。

+0

ええ、それは私の愚かだったので、ヒントのためにあなたに感謝します。 – LaravelOnly

関連する問題