我的函数在 show.bs.modal 之后加载了很多次

My function loads many times after show.bs.modal

我正在尝试使用 toastr 在模式打开时显示帐户提醒

问题出在我打开模式时; 当我单击按钮打开模式时,警报只显示一次(应该是,这是完美的),但第二次打开模式时,警报显示 2 次 我第三次打开模式时,警报显示了 5 次 以此类推,9、12、18、24、32 次。 就好像它们在成倍增加,所以我输入了:console.log("Modal Open"),这就是控制台上显示的内容:

Output Console

这是我的代码,感谢您的帮助,因为我不知道为什么会这样

function edit_order(tbody, datatable) {
//ON CLICK <a class="edit"></a>
        $(tbody).on("click", "a.edit", function() {
           
        $('#myModal2').on('show.bs.modal', function(event) {
              
          var modal = $(this);
          console.log("Modal Open");
              
        })
   });
}

那是因为你用一个事件处理程序来解决另一个问题。

edit_order 运行秒,注册一个事件处理程序来监听点击事件。当发生这种情况时,将注册一个新的 show.bs.modal 事件处理程序。因此,如果您 运行 edit_order 不止一次,您将有多个处理程序来为 #myModal2 设置一些新的处理程序...这是乘法效应。

鉴于代码非常小,我会建议一个快速修复:使用 .one() instead of on() 来点击 a.edit。因此 #myModal2 上的处理程序只会设置一次。

但是最好回顾一下您如何设置事件处理程序...您可能在很多地方都犯了同样的错误。 提醒:不要使用事件来注册事件处理程序。 ;)

下面是适用于该问题的快速修复方法:

function edit_order(tbody, datatable) {
//ON CLICK <a class="edit"></a>
  $(tbody).one("click", "a.edit", function() {  // <-- .one here

    $('#myModal2').on('show.bs.modal', function(event) {

      var modal = $(this);
      console.log("Modal Open");

    })
  });
}

简而言之,这应该足够了(为什么在 named-function 中呢?):

$('#myModal2').on('show.bs.modal', function(event) {

  var modal = $(this);
  console.log("Modal Open");
})