我正在使用twitter bootstrap 3.3.1来弹出模态。模态的内容是一种形式(非远程)。我正在使用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">×</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 );
答案 0 :(得分:1)
我会疯狂猜测并说每次$(&#39; #datable&#39;)。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
});