2017-05-14 92 views
0

如何在使用jQuery阻止之后继续提交表单?如何在使用jQuery阻止之后继续提交表单?

例如:
有一个删除input元素:

<form action="/articles/{{ $article->id }}" method="POST"> 
    {{ method_field('DELETE') }} 
    {{ csrf_field() }} 
    <input class="btn btn-danger btn-sm need-alert" type="submit" value="delete"> 
</form> 

我想提交表单之前给用户一个sweetalert2警报。

Javascript code:

<script> 
    $('.need-alert').on('click', function (event) { 

     event.preventDefault(); 

     //sweetalert2 code 
     swal({ 
      title: 'Are you sure?', 
      text: "You won't be able to revert this!", 
      type: 'warning', 
      showCancelButton: true, 
      confirmButtonColor: '#3085d6', 
      cancelButtonColor: '#d33', 
      confirmButtonText: 'Yes, delete it!' 
     }).then(function() { 

      //... 

     }).catch(swal.noop); 
    }) 
</script> 

sweetalert2警告框可以正确显示。

问:
如何继续单击sweetalert2提示框的确定按钮后,提交表单?

+0

给您形式的ID,然后在做$( “#formId”)提交() –

+0

点击提示框确认按钮,消防$(“#后。形式“)提交(); –

+0

@M。加拉和Akshay Chawla,它不起作用。 – zwl1619

回答

0

你可以用jQuery's submit function来做到这一点。

<form id="deleteForm" action="/articles/{{ $article->id }}" method="POST"> 
    {{ method_field('DELETE') }} 
    {{ csrf_field() }} 
    <input class="btn btn-danger btn-sm need-alert" type="submit" value="delete"> 
</form> 

<script> 
    $('.need-alert').on('click', function (event) { 

     event.preventDefault(); 

     //sweetalert2 code 
     swal({ 
      title: 'Are you sure?', 
      text: "You won't be able to revert this!", 
      type: 'warning', 
      showCancelButton: true, 
      confirmButtonColor: '#3085d6', 
      cancelButtonColor: '#d33', 
      confirmButtonText: 'Yes, delete it!' 
     }).then(function() { 
      $('#deleteForm').submit(); 
     }).catch(swal.noop); 
    }) 
</script> 

处理提交事件而不是点击删除按钮甚至更好。如果用户使用键盘导航到按钮,则不会显示确认。您可以通过执行解决这个问题:

$(document).ready(function() { 
 
     var form = $("#deleteForm"); 
 
     // keep track of the swall popup answer. 
 
     var isConfirmed = false; 
 

 
     form.submit(function (event) { 
 
      // If answered "ok" previously continue submitting the form. 
 
      if (isConfirmed) { 
 
       return true; 
 
      } 
 

 
      // Confirm is not ok yet so prevent the form from submitting and show the message. 
 
      event.preventDefault(); 
 

 
      //sweetalert2 code 
 
      swal({ 
 
       title: 'Are you sure?', 
 
       text: "You won't be able to revert this!", 
 
       type: 'warning', 
 
       showCancelButton: true, 
 
       confirmButtonColor: '#3085d6', 
 
       cancelButtonColor: '#d33', 
 
       confirmButtonText: 'Yes, delete it!' 
 
      }).then(function (confirmed) { 
 
       isConfirmed = confirmed; 
 
       form.submit(); 
 
      }).catch(swal.noop); 
 
     }); 
 
    });
<link href="https://cdn.jsdelivr.net/sweetalert2/4.0.5/sweetalert2.min.css" rel="stylesheet"/> 
 
<script src="https://cdn.jsdelivr.net/sweetalert2/4.0.10/sweetalert2.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<form id="deleteForm" action="/articles/{{ $article->id }}" method="POST"> 
 
    <!-- {{ method_field('DELETE') }} 
 
    {{ csrf_field() }} --> 
 
    <input class="btn btn-danger btn-sm need-alert" type="submit" value="delete"> 
 
</form>

+0

我尝试过,但它不起作用。它看起来像回调函数中的代码不运行。 – zwl1619

+1

@ zwl1619我改变了代码并添加了一个片段。这工作。但我不确定这是否是最佳解决方案。 (我评论了“csrf”字段以使该片段有效。) –