2016-07-31 45 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> 

這裏是我的腳本處理表單驗證和AJAX發佈

<!-- 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; 
      } 
     }); 

更新

這我的控制器

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

是的,那又怎麼樣?我檢查點擊提交,所以我可以阻止它,並與ajax做,而不刷新頁面,並簡單地關閉模式...加上我有同樣的方式,在創建窗體上,所以它不是問題.... – 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