【问题标题】:Twitter bootstrap call the ajax more than 1 timesTwitter bootstrap 调用 ajax 超过 1 次
【发布时间】:2015-03-27 20:47:47
【问题描述】:

我正在使用 twitter bootstrap 3.3.1 来弹出模式。 modal 的内容是一种形式(非远程)。我正在使用 ajax 在数据库中插入值。

我的问题是,如果我打开表单并关闭它,然后再次打开它,那么在提交表单时,ajax 会被调用两次(我可以在控制台中看到)。

我的模式与元素(按钮)绑定,该元素(按钮)在数据表中多次动态生成。

下面是我的js代码

$("#datatable").on('click', '.my-button', function(){

                var id = $(this).attr("data-id");

                $('#myModal').modal('show');                

                $('.btn-close-modal').on('click', function() {                          
                    $('#myModal').modal('hide');

                });

                $('.btn-save-changes').on('click', function() {

                    $('#myModal').modal('hide');


                    var rmk = $('#remark').val();

                    $.ajax({
                        url: 'add-value.php',
                        type: 'POST',
                        data: { id: id, rm: rmk },
                        success: function(a) {

                        }
                    });
                });
});

下面是我的模态代码

<div class="modal" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close btn-close-modal" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
        <h4 class="modal-title" id="myModalLabel">Form</h4>
      </div>
      <div class="modal-body" id="modal-body">

        <div class="row">
         <div class="col-md-12">
            <div class="box box-primary">
                <div class="box-header">
                </div><!-- /.box-header -->

                <!-- form start -->
                <form role="form" method="post">                        
                    <div class="box-body">
                        <div class="form-group">
                                <label for="name">Remark</label>                                
                                 <input type="text" class="form-control" id="remark" name="remark" >

                            </div><!-- /.form group -->                         

                    </div><!-- /.box-body -->  

                </form>
            </div><!-- /.box -->
         </div>
        </div> <!--/.row--->

      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default btn-close-modal">Close</button>
        <button type="button" class="btn btn-primary btn-save-changes">Submit</button>
      </div>
    </div>
  </div>
 </div>

我已经尝试了以下所有这些代码,但它们都不起作用

$('#myModal').on('hide.bs.modal', function () {
   $('#myModal').removeData();
})

$("#myModal").on('hidden.bs.modal', function () {
    $(this).data('bs.modal', null);
});

$('body').on('hidden.bs.modal', '#myModal', function () {
  $(this).removeData('bs.modal');
});

$( '#myModal' ).modal( 'hide' ).data( 'bs.modal', null );

【问题讨论】:

  • 您是否尝试过将 .btn-save-changes 的点击方法移到 #datatable 点击方法之外?

标签: jquery ajax twitter-bootstrap modal-dialog


【解决方案1】:

我要大胆猜测一下,每次调用 $('#datatable').on() 时,表单都会发布一次。尝试分离 jQuery 以显示/隐藏模式和发布表单,例如:

$('#datatable').on('click', function () {
    // show the modal
});

$('.btn-close-modal').on('click', function () {
    // hide the modal
});

$('.btn-save-changes').on('click', function () {
    // ajax
});

【讨论】:

  • 谢谢,会试试的。有什么简单的方法可以从 $('#datatable') click in ajax 获取价值吗?查看我的 js 代码,我收到点击元素的 id 并通过 ajax 传递它
  • #datatable 是什么元素?它是一个包含几个可点击项目的表格还是一个表单控件?通过您的 HTML,我猜它在模式之外...
  • 您可以声明一个全局变量并将其设置为等于元素 id,方法与您当前分配值的方式相同。或者在您设置 var id 的 js 中,您可以改为添加“clicked”类或独特的东西,然后当您保存更改时,您可以使用唯一的类名检索 id
  • 抱歉回复晚了。你是对的,在分离 jquery 代码后它解决了我的问题。对于 id,我只是将值保存在点击事件的额外隐藏输入字段中。非常感谢您的帮助。
猜你喜欢
  • 2014-01-25
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多