2017-01-24 55 views
1

我有以下问题,我执行了一个函数来更新我的数据与PHP和Codeigniter,也使用AJAX ..一切工作正常,但事实证明,我想验证我的使用jQuery的验证执行AJAX请求,在此之前已经形式,我有我的验证规则,我的代码如下:验证使用jQuery验证表单使用AJAX

function edit(id = null) { 

    if (!id) { 
     alert('error'); 
     return; 
    } 

    $.ajax({ 
     url: 'roles/get_data_id/' + id, 
     type: 'post', 
     dataType: 'json', 
     success: function(response) { 
      $("#edit_name").val(response.Name); 
      $("#edit_description").val(response.Description);  

      $("#form_edit").unbind('submit').bind('submit', function() { 
       var form = $(this); 

       $.ajax({ 
        url: form.attr('action') + '/' + id, 
        type: 'post', 
        data: form.serialize(), 
        dataType: 'json', 
        success: function(response) { 
         if(response.success === true) { 
          $("#modal_edit").modal('hide'); 

          alert('The data were updated'); 

          $("#form_edit")[0].reset(); 
          table_data.ajax.reload(null, false); 
         } else { 
          $("#modal_edit").modal('hide'); 
          alert('Error updating data'); 
         } 
        }// /succes 
       }); // /ajax 
       return false; 
      });  
     } 
    }); 
} 

代码工作很好..更新我的数据。现在我的问题是在哪里用我的验证规则添加以下代码:

$('#form_edit').validate({ 
    highlight: function (input) { 
     $(input).parents('.form-line').addClass('error'); 
    }, 
    unhighlight: function (input) { 
     $(input).parents('.form-line').removeClass('error'); 
    }, 
    errorPlacement: function (error, element) { 
     $(element).parents('.form-group').append(error); 
    } 
}); 

这是我当前的代码:

function edit(id = null) { 

    if (!id) { 
    alert('error'); 
    return; 
    } 

    $.ajax({ 
    url: 'roles/get_data_id/' + id, 
    type: 'post', 
    dataType: 'json', 
    success: function(response) { 
     $("#edit_name").val(response.Name); 
     $("#edit_description").val(response.Description); 

     $('#form_edit').validate({ 
     highlight: function(input) { 
      $(input).parents('.form-line').addClass('error'); 
     }, 
     unhighlight: function(input) { 
      $(input).parents('.form-line').removeClass('error'); 
     }, 
     errorPlacement: function(error, element) { 
      $(element).parents('.form-group').append(error); 
     }, 
     submitHandler: function() { 

      $.ajax({ 
      url: form.attr('action') + '/' + id, 
      type: 'post', 
      data: form.serialize(), 
      dataType: 'json', 
      success: function(response) { 
       if (response.success === true) { 
        $("#modal_edit").modal('hide'); 

        alert('The data were updated'); 

        $("#form_edit")[0].reset(); 
        table_data.ajax.reload(null, false); 
       } else { 
        $("#modal_edit").modal('hide'); 
        alert('Error updating data'); 
       } 
       } // /succes 
      }); // /ajax 
      return false; 
     } 
     }); 
    } 
    }); 
} 

这段代码我的表单:

<div class="modal fade" id="modal_edit" tabindex="-1" role="dialog"> 
    <div class="modal-dialog modal-sm" role="document"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
     <h4 class="modal-title" id="smallModalLabel">Edit rol</h4> 
     </div> 
     <form id="form_edit" action="<?php echo base_url();?>rol/edit" method="POST"> 
     <div class="modal-body"> 
      <div class="form-group form-float"> 
      <label class="form-label">Name</label> 
      <div class="form-line"> 
       <input type="text" id="edit_name" name="edit_name" class="form-control" maxlength="20" minlength="5" required> 
      </div> 
      </div> 
      <div class="form-group form-float"> 
      <label class="form-label">Description</label> 
      <div class="form-line"> 
       <textarea id="edit_description" name="edit_description" rows="3" class="form-control no-resize" required></textarea> 
      </div> 
      </div> 
     </div> 
     <div class="modal-footer"> 
      <button type="submit" class="btn btn-link waves-effect">update</button> 
      <button type="button" class="btn btn-link waves-effect" data-dismiss="modal">Cancel</button> 
     </div> 
     </form> 
    </div> 
    </div> 
</div> 
+0

您有一个'阿贾克斯()'.validate的'了'submitHandler'()',你已经把内部功能在另一个'.ajax()'函数里面! – Sparky

回答

0

我使你成为WORKING DEMO, 我希望你的身影了解如何从那里继续。

HTML的变化:

<form id="form_edit"> 
<button id="submitForm" type="submit" class="btn btn-link waves-effect">update</button> 

的JavaScript:

$(document).ready(function() { 

$("#submitForm").on("click", edit); 

    // introduce the validation rules to the form! 
    $('#form_edit') 
     .validate({ 
      highlight: function(input) { 
       $(input).parents('.form-line').addClass('error'); 
      }, 
      unhighlight: function(input) { 
       $(input).parents('.form-line').removeClass('error'); 
      }, 
      errorPlacement: function(error, element) { 
       $(element).parents('.form-group').append(error); 
      }, 
      submitHandler: function(form) { 
       //Will execute only when the form passed validation. 
       OnSubmit(form); 
      } 
     }); 


    function OnSubmit(form) { 
     $.ajax({ 
      url: form.attr('action') + '/' + id, 
      type: 'post', 
      data: form.serialize(), 
      dataType: 'json', 
      success: function(response) { 
       if (response.success === true) { 
        $("#modal_edit").modal('hide'); 
        alert('The data were updated'); 
        $("#form_edit")[0].reset(); 
        table_data.ajax.reload(null, false); 
       } else { 
        $("#modal_edit").modal('hide'); 
        alert('Error updating data'); 
       } 
      } // /success 
     }); // /ajax 
    } 


    function edit(id = null) { 

     if (!id) { 
      alert('error'); 
      return; 
     } 

     $.ajax({ 
      url: 'roles/get_data_id/' + id, 
      type: 'post', 
      dataType: 'json', 
      success: function(response) { 
       $("#edit_name").val(response.Name); 
       $("#edit_description").val(response.Description);  

       return false; 
      } 
     });  
    } 

}); 
+0

我有以下错误:Uncaught SyntaxError:意外的标记函数。我不知道在我的验证规则结尾处是否应该写一个','。在开始OnSubmit功能之前 –

+0

@FernandoBanegas我编辑了我的答案 –

+0

我有一个语法错误的问题,它不起作用,在编辑功能中,我根据ID检索数据,并将它们带到我的窗体的模态窗口中..但现在它不需要任何东西,我得到这个错误:未捕获ReferenceError:编辑未定义 –

1

您可以使用jQuery的验证提供的submitHandler,这样的AJAX将仅在验证规则传递:

$('#form_edit').validate({ 
    highlight: function(input) { 
    $(input).parents('.form-line').addClass('error'); 
    }, 
    unhighlight: function(input) { 
    $(input).parents('.form-line').removeClass('error'); 
    }, 
    errorPlacement: function(error, element) { 
    $(element).parents('.form-group').append(error); 
    }, 
    submitHandler: function() { 
    //your AJAX code goes here 
    edit(your_id_param_goes_here); 
    } 

}); 
+0

验证的作品,但它把我发送到空白页面的行动,我不得不改变,在ajax –

+0

@FernandoBanegas,好的。所以有问题?你需要更多的帮助吗? – Ionut

+0

是的,我已经放置了您提到的代码。验证工作,但我不更新数据,显然行动后,不起作用 –