防止表单自动提交ajax laravel

Posted

技术标签:

【中文标题】防止表单自动提交ajax laravel【英文标题】:preventing form auto submit ajax laravel 【发布时间】:2015-12-20 06:38:58 【问题描述】:

我已经使用 ajaxdatabase 获取数据,并使用 javascript confirm 对话框将其展示给用户。但即使在用户选择cancel 选项后,form 正在被提交,但我只想在用户想要通过在确认框中选择OK 进一步继续时提交表单。这是我的code

     <form class="form-horizontal form-bordered" method="post" id="ncell" action="formaction">
           <input type="hidden" name="_token" value="csrf_token()">

             <div class="form-group">
                <label class="col-md-3 control-label" for="inputSuccess">Amount</label>
                     <div class="col-md-6">
                         <select class="form-control mb-md" name="amount" id="amount">
                                 <option value="10">10</option>
                                 <option value="20">20</option>
                                 <option value="30">30</option>
                                 <option value="40">40</option>
                                 <option value="50">50</option>
                          </select>

                  </div>
               </div>

    <div class="input-group mb-md">                  
    <button type="submit" class="btn btn-warning btn-sm" id="sub">Submit</button>
     </div>
</form>

还有我的javascript

<script>
    $("#ncell").submit(function(e)
        var selectedVal= $("select option:selected").val();
        $.ajax(
            type:"GET",
            url: "/getdollarvalue",//put y
            data: value:selectedVal,
            contentType: "application/json; charset=utf-8",
            dataType: "Json",
            success: function(result)
                return confirm(result.nrs); // Note Send the Json Object from the server side
            

        );
        e.preventDefault();
    );
</script>

当用户单击submit 按钮时,我现在得到确认对话框。我只想在用户单击confirm 对话框中的OK 时继续进行。

【问题讨论】:

在按钮点击上添加preventDefault()e.preventDefault() 需要在ok按钮上绑定click事件才能提交表单。 【参考方案1】:
<script>
        $("#ncell").submit(function(e)
            var selectedVal= $("select option:selected").val();
            $.ajax(
                type:"GET",
                url: "/getdollarvalue",//put y
                data: value:selectedVal,
                contentType: "application/json; charset=utf-8",
                dataType: "Json",
                success: function(result)
                    if(confirm(result.nrs))
                         $("#ncell").submit();
                   
                

            );
            return false;
        );
    </script>

或者您可以使用e.preventDefault(); 代替return false

【讨论】:

我尝试使用return false 并添加preventdefault,添加这些可以防止表单提交,即使我在确认对话框中单击OK 当用户在确认框中点击确定时,您要提交此表单吗?【参考方案2】:

您可以将按钮的按钮类型从提交更改为按钮,如

<input type="button" class="btn btn-warning btn-sm" id="sub"/>

避免自动提交

【讨论】:

【参考方案3】:

如果你想在用户按下确定按钮时提交表单,你需要给确定按钮绑定一个点击事件来提交表单。 请参阅下面的示例。

$('.ok-btn').click(function()
    var data = $('form').serialize();
     // your ajax to submit the form and handle the response.
    $.ajax(

    )
);

希望对您有所帮助。

【讨论】:

【参考方案4】:

您可以将 ajax 调用放入函数中,并从确认对话框函数中调用它 您还应该在提交点击时添加 return false 以防止默认的表单提交操作:

        $('#submit').on('click', function() 
              confirmFunction('Are you sure you want to...');
              return false;
            

            function confirmFunction(message) 
              //show confirm dialog ( ok - cancel )
              $('#confirm').show();
              $('#confirm p').innerhtml(message);
              $('.ok').on('click', function()
                ajaxSubmit();
                $('#confirm').hide();
              );
              $('.cancel').on('click', function()
                $('#confirm').hide();
              );
            

            function ajaxSubmit() 
              var selectedVal = $("select option:selected").val();
              $.ajax(
                type: "GET",
                url: "/getdollarvalue", //put y
                data: 
                  value: selectedVal
                ,
                contentType: "application/json; charset=utf-8",
                dataType: "Json",
                success: function(result) 
                  return confirm(result.nrs);
                

              );
            ;

【讨论】:

以上是关于防止表单自动提交ajax laravel的主要内容,如果未能解决你的问题,请参考以下文章

AJAX表单自动提交

JavaScript AJAX表单自动提交

jquery AJAX提交前beforesend无效,大家帮我看下谢谢。

AJAX表单自动提交TinyMCE fix

通过在 struts-dojo 自动完成上按 enter 键来防止表单提交

Ajax提交表单时验证码自动验证 php后端验证码检测