使用 JavaScript 创建的按钮,当再次创建按钮时,点击事件发生两次

Button created with JavaScript, when the button is created again the on click event happens twice

我有一个弹出窗口(模态),模态上的数据是用 JavaScript 生成的。发送 ajax 请求以获取显示的数据

单击启用或禁用按钮时,ajax 将连同此信息发送到后端。

我遇到的问题是,当模式关闭然后重新打开时,点击操作发生了两次(如果您点击启用,它会发送弹出窗口打开和关闭次数的消息)。

这是创建模式的一些代码

$(document).on('click', '.availability', function() {
    $('.availability_modal_table_body').empty();
    var stuff = $(this).data('info').split(',');

    $.ajax({
            type: 'get',
            url: base_url+"catalogs/"+stuff[0]+"/options",
           
            success: function(data) {
                $('.availability_modal_title').text(`Options for ${stuff[1]}`);

                    var string ="";
                for (var i = 0; i < data.avalable.length; i++) {
               string+=`<tr class="option_${data.avalable[i].id}"><td>${data.avalable[i].name}</td><td>`;
  
                    if(data.avalable[i].catalog_id == null){
                        string+= `<button  data-toggle='tooltip' class='btn  btn-info' data-original-title='View'>Create Add</button> `;
                        string+= `<button value="ad_block"${stuff[0]}  class='btn ad_disable btn-warning' data-info="${data.avalable[i].id},${stuff[0]}">Block</button>`;
                    }else if(data.avalable[i].order_id == null){
                             string+= `<button value="create_ad"${stuff[0]}  data-toggle='tooltip' class='btn  btn-info view' data-original-title='View'>Create Add</button> `;
                             string+= `<button value="enable_Ad"${stuff[0]}  class='btn enable_ad btn-warning' data-info="${data.avalable[i].item_id}">Enable</button>`;

                    }else{
                         string+= `<button value="create_ad"${stuff[0]}  data-toggle='tooltip' class='btn  btn-success view' data-original-title='View'>View Booking</button>`;

                    }
                    string+="</td></tr>";
                }
                $('.availability_modal_table_body').html(string);                
                $('#availability_modal').modal('show');
                 
            }
        });

这是阻止按钮代码

$(document).on('click', '.ad_disable', function() {
       var stuff = $(this).data('info').split(',');
        $.ajax({
            type: 'get',
            url: base_url+`items/block/${stuff[0]}/${stuff[1]}`,
             headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
            success: function(data) {
                if(data == 1){
                      toastr.success('Item blocked');
                      $(this).hide();
                }else{
                    toastr.warning('Failed - See errors');
                }
            }
        });  
    });

发生这种情况是因为当您关闭模式时,您并没有解除绑定到按钮的点击事件。

在关闭模式之前,您应该先取消绑定点击事件。

如果你使用jQuery≥1.7那么你可以像下面这样解绑点击

$(document).off('click', '.availability')

并且 jQuery < 1.7

 $(document).unbind('click', '.availability')

有关更多参考,请参阅这篇文章:https://api.jquery.com/unbind/