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