模态表单上的 jQuery submit() vc click()

Posted

技术标签:

【中文标题】模态表单上的 jQuery submit() vc click()【英文标题】:jQuery submit() vc click() on Modal Form 【发布时间】:2019-01-29 01:52:24 【问题描述】:

我在 Bootstrap Modal 中有一个表单、2 个文本输入和一个提交按钮。我想在不刷新当前页面(出现 Modal 的地方)的情况下将表单数据发送到 Laravel 控制器。

首先,我使用了 jQuery click() 函数,它完成了我的预期(发送数据、执行控制器、返回 JSON,并使用成功/错误规则评估 JSON,并且不刷新)。

当我将代码更改为 jQuery submit() 函数时,数据已发送,控制器执行它,返回 JSON,但现在浏览器显示 JSON 纯文本。没有执行成功/错误中的代码。

为什么这两个函数之间会发生这种不同的行为?

JS - 使用 click() :

$(document).ready(function()
        $('button#ajaxSubmit').click(function(e)


        e.preventDefault();

        $.ajaxSetup(
            headers: 
            'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
            
        );
        jQuery.ajax(
            url: " url('/question') ",
            method: 'POST',
            data: $('#form_pergunta').serialize(),
            success: function(result)
                $('#form_pergunta')[0].reset();
                $('#myModal_Pergunte').modal('hide');
                msgbox_Text = "Sua pergunta foi incluída com sucesso!" ;
                $("#msgbox_alertmsg").append(msgbox_Text);
                $('#myModal_MsgBox').modal('show');
            ,
            error: function (data, textStatus, errorThrown) 
                console.log(data);
            ,
        );
    );
);

JS - 使用 submit():

同上,只是改了

 $('button#ajaxSubmit').click(function(e)  

$('#form_pergunta').submit(function(e)

html

    <div class="modal fade bd-example-modal-lg" id="myModal_Pergunte" tabindex="-1" role="dialog" >
  <div class="modal-dialog modal-lg">

     <!-- Modal content-->
     <div class="modal-content">
        <div class="modal-header">
           <h5 class="modal-title">Title</h5>
           <button type="button" class="close" data-dismiss="modal">X</button>
       </div>
       <div class="modal-body">

        <form method="POST"  action=" url('/question')" id="form_pergunta">
             csrf_field() 

            <div class="form-group">
             <label for="formGroupTextArea">What is your question? </label>
             <textarea type="text" class="form-control" id="formGroupTextArea" placeholder="Faça sua pergunta utilizando até 250 caracteres." rows="8" maxlength="250" name="form_question" required></textarea>
             <h6 class="float-right pt-1 text-muted" id="count_message"></h6>

         </div>
         <div class="form-group">
             <label for="formGroupInputUrl">Link opcional</label>
             <input type="text" class="form-control" id="formGroupInputUrl" placeholder="Caso deseje, inclua um link que faça referência a pergunta" name="form_url" maxlength="250">
         </div>
     </div> 
     <div class="modal-footer">
         <input type="submit" class="btn btn-primary" name="btn_submit" id="ajaxSubmit" >Submit</button>
     </div>

     </form>
</div>
</div>
</div>

【问题讨论】:

如果您共享两个选项代码会更容易回答。问题可能出在很多地方。 两者是相等的,除了使用的函数:$('button#ajaxSubmit').**click**(function(e) ... to $('button#ajaxSubmit').**submit**(function(e) 你能分享你的html 好的,刚刚编辑了问题。 我相信我刚刚发现了一个“错误”。以前, '' 是一个 ' 【参考方案1】:

您必须将提交事件处理程序附加到您的form HTML 元素,而不是按钮,因为引发提交事件的是form 元素,而不是按钮。所以你应该做这样的事情:

$('#form_pergunta').submit(function(e)  ... 

代替:

$('button#ajaxSubmit').submit(function(e) ... 

【讨论】:

f-CJ,我测试了两者,不同的行为仍在继续。需要注意的是,这两个函数的表单都是由 Controller 提交和执行的。问题出现在返回/响应处理中。

以上是关于模态表单上的 jQuery submit() vc click()的主要内容,如果未能解决你的问题,请参考以下文章

Jquery ui“恢复”模态表单上的位置取消

带有 Jquery 模态形式的 asp.net MVC

.submit 上的 jQuery 检查数据库中是不是存在登录并处理表单

使用jQuery ui创建模态表单

引导模态高度上的转换不起作用

Chrome 上的 Jquery Form.submit() 有效,但在 Firefox 中无效