Bootstrap模态第二次不触发jQuery函数

时间:2018-09-23 23:09:21

标签: jquery bootstrap-modal

我正在尝试触发一个函数,该函数是show.bs.modal上的表单提交功能,但它仅触发第一次。

我的模态: enter image description here

列出的每个项目都是一个表格。我为此的jQuery代码是:

$('#edit_modal').on('shown.bs.modal', function (event) {
    console.log("shown");
    $('#edit_form').submit(function (event) {
        event.preventDefault();
        var url = $(this).attr('action');
        var data = $(this).serialize();
        $.post(url, data, function (data) {
            $('#edbtn').attr({
                class: 'btn btn-success',
                disabled: 'true',
                value: data
            });
        });

    });
});

在控制台中,我只能在第一次打开日志时看到“显示”日志。而且只有第一次单击按钮保存时,它才能正常工作,但是第二次重定向到actionurl.php页面,这意味着由于未显示该功能,因此这次不会触发此功能。

  

注意:我已经尝试过$(this).modal()。hide()。show();但这不是   重新显示模态或类似的东西。

3 个答案:

答案 0 :(得分:1)

如果您的模式是动态创建的(如果它在关闭后从dom中删除并在打开时追加),则您需要使用其他事件构造:

$(document).on('shown.bs.modal', '#edit_modal', function (event) { ... })

与提交事件相同:

$(document).on('submit', '#edit_form', function(event) { ... })

答案 1 :(得分:1)

每次显示模式时,您都将设置一个新的提交侦听器。为防止将多个侦听器附加到单个表单:

 $('#edit_form').off("submit").on("submit",function (event){
  //blah
  })

以及旧版的jQu​​ery:

 $('#edit_form').unbind("submit").bind("submit",function (event){
  //blah
  })

如果表单在打开模式之前已存在,则更好的方法是将侦听器设置为一次且不在模式事件之外。

答案 2 :(得分:0)

如果模态内部的表单不是动态添加的,则在打开模态时,只需将绑定从模态打开事件中删除就可以了:

$('#edit_form').submit(function(event) {
  event.preventDefault();
  var url = $(this).attr('action');
  var data = $(this).serialize();
  $.post(url, data, function(data) {
    $('#edbtn').attr({
      class: 'btn btn-success',
      disabled: 'true',
      value: data
    });
  });
});


如果在模式打开时添加了表单,则需要绑定现有元素,例如<body>

$('body').on('submit', '#edit_form', function(event){
  event.preventDefault();
  var url = $(this).attr('action');
  var data = $(this).serialize();
  $.post(url, data, function(data) {
    $('#edbtn').attr({
      class: 'btn btn-success',
      disabled: 'true',
      value: data
    });
  });
});